내가 여기 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
을 갖고 싶어. 이렇게
따라서, 사용자가 새로운 기록이 나의 새로운 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">
에 대한 생산 코드입니다
id
및 name
속성은 모든 확인란에 동일합니다. 따라서 확인란을 선택하더라도 첫 번째 확인란 만 항상 확인됩니다.
새 house_rule 레코드가 연결된 집에 대해 생성되고 있지만 값은 여전히 0
이며 1
이 아닙니다. ID가 모든 행 0 이유
은, 내 당신이 실제로 중첩 된 행이 반복되지 않기 때문에이 올바르게 양식을 렌더링하지 않습니다 HousesController new action
def new
@house = House.find(params[:id])
@house.house_rules.build
end
은 그냥 사용해보십시오 수 '<% = house_rule.check_box % 허용>'? 그래도 도움이되지 않으면 컨트롤러 내에서 디버그하여 params에 전달 된 것이 있는지 확인하십시오. – DiodonHystrix
Hello @Diodon, 나는 체크 박스의 체크 값을 'yes'로하고 체크되지 않은 값을 'no'로하고 싶다. 그래서 내가 그렇게 준거야. – Mahendhar
네, 맞습니다. 죄송합니다. 정확히 작동하지 않는 것을 말하고 HousesController의 동작을 보여줄 수 있습니까? – DiodonHystrix