2017-03-26 21 views
0

내가 여기 house_rules중첩 된 속성을 통해 연관 모델에서 다중 체크 박스 업데이트 | 누에 고치 보석 |

class House < ActiveRecord::Base 
has_many :house_rules, dependent: :destroy 
accepts_nested_attributes_for :house_rules, reject_if: :all_blank, allow_destroy: true 
end 

을 has_many 하우스 모델을 가지고 난간은 house_rule 모델에게 있습니다 여기에

class HouseRule < ActiveRecord::Base 
belongs_to :house 
enum rule_type: { predefined: 0, user_defined: 1 } 
enum allowed: { no: 0, yes: 1 } 
end 

create_table "house_rules", force: :cascade do |t| 
    t.integer "house_id" 
    t.string "rule" 
    t.integer "rule_type", default: 1 
    t.integer "allowed", default: 0 
    t.datetime "created_at",    null: false 
    t.datetime "updated_at",    null: false 
end 

나는 몇 가지 미리 정의 된이 house_rules 테이블의 다른 열 수 있습니다 데이터베이스에 저장된 allowed 열에 0으로 설정된 house_rules by 예를 default.For :

<HouseRule id: 4, house_id: nil, rule: "Smoking allowed", rule_type: 0, allowed: 0, created_at: "2017-03-26 20:54:09", updated_at: "2017-03-26 20:54:09"> 

나는 새로운 house 형태로 check_boxes 등 모든 house_rules을 갖고 싶어. 이렇게 enter image description here

따라서, 사용자가 새로운 기록이 나의 새로운 house 형태이

<HouseRule id: 5, house_id: 1, rule: "Smoking allowed", rule_type: 1, allowed: 1, created_at: "2017-03-26 20:54:09", updated_at: "2017-03-26 20:54:09"> 

rule_type: 1 #user_defined rule 
allowed: 1 #smoking is allowed 

<%= simple_form_for @house do |f| %> 
<div id="house_rules"> 
    <%= f.simple_fields_for :house_rules do |house_rule| %> 
    <% HouseRule.predefined.each do |rule| %> 
    <div> 
    <%= house_rule.label :allowed, rule.rule %> 
    <%= house_rule.check_box :allowed, {}, 'yes', 'no' %> 
    </div> 
    <% end %> 
    <% end %> 
</div> 
<% end %> 

위의 코드처럼 만들어, '흡연 가능'라벨 확인란을 확인할 때 예상대로 확인란을 표시하지만 예상대로 작동하지 않습니다. 누군가가이 일을하는 방법을 안내해 줄 수 있습니까?

또한

, 나는 HousesController에서 다음을 허용 한 한

house_rules_attributes: [:id, :allowed, :_destroy]) 

편집 :이 양식이 문제는의 각 체크 박스

<label for="house_house_rules_attributes_0_allowed">Smoking Allowed</label> 
<input name="house[house_rules_attributes][0][allowed]" type="hidden" value="0"><input type="checkbox" value="1" name="house[house_rules_attributes][0][allowed]" id="house_house_rules_attributes_0_allowed"> 

에 대한 생산 코드입니다

idname 속성은 모든 확인란에 동일합니다. 따라서 확인란을 선택하더라도 첫 번째 확인란 만 항상 확인됩니다.

새 house_rule 레코드가 연결된 집에 대해 생성되고 있지만 값은 여전히 ​​0이며 1이 아닙니다. ID가 모든 행 0 이유

은, 내 당신이 실제로 중첩 된 행이 반복되지 않기 때문에이 올바르게 양식을 렌더링하지 않습니다 HousesController new action

def new 
@house = House.find(params[:id]) 
@house.house_rules.build 
end 
+0

은 그냥 사용해보십시오 수 '<% = house_rule.check_box % 허용>'? 그래도 도움이되지 않으면 컨트롤러 내에서 디버그하여 params에 전달 된 것이 있는지 확인하십시오. – DiodonHystrix

+0

Hello @Diodon, 나는 체크 박스의 체크 값을 'yes'로하고 체크되지 않은 값을 'no'로하고 싶다. 그래서 내가 그렇게 준거야. – Mahendhar

+0

네, 맞습니다. 죄송합니다. 정확히 작동하지 않는 것을 말하고 HousesController의 동작을 보여줄 수 있습니까? – DiodonHystrix

답변

1

인이된다.

대신 new 작업에서 컨트롤러의 house에 대한 모든 미리 정의 된 규칙을 미리 작성해야합니다.다음과 같이

def new 
    @house = House.new 
    HouseRule.predefined.each do |hr| 
    @house.house_rules.build(rule: hr.rule) 
    end 
end 

을 그리고보기에 그냥 평소처럼 집 규칙을 반복 :

<%= f.simple_fields_for :house_rules do |house_rule| %> 
    <%= house_rule.label :allowed, house_rule.object.rule %> 
    <%= house_rule.check_box :allowed, {}, 'yes', 'no' %> 
</end> 
+1

많은 감사합니다 @ nathanvda, 지금은 잘 작동합니다. 시간 내 주셔서 감사합니다. – Mahendhar