2015-06-08 28 views
2

一個question的has_many kpi表格一的has_many:通過與附加的屬性關係通過<code>kpiquestions</code>連接表

class Question < ActiveRecord::Base 
    has_many :kpiquestions, dependent: :destroy 
    has_many :kpis, through: :kpiquestions 
end 

class Kpi < ActiveRecord::Base 
    has_many :kpiquestions, dependent: :destroy 
    has_many :questions, through: :kpiquestions 
end 

class Kpiquestion < ActiveRecord::Base 
    belongs_to :kpi 
    belongs_to :question 
end 

現在我有一個工作question形式,我可以使用複選框添加的KPI:

= form_for @question do |f| 
    = render "layouts/form_messages", target: @question 
    .form-group 
    = f.label "Name" 
    = f.text_field :name 
    .form-group 
    = f.label "KPI's" 
    %ul 
     = hidden_field_tag "question[kpi_ids][]", nil 
     - @kpis.each do |kpi| 
     %li.checkbox 
      = check_box_tag "question[kpi_ids][]", kpi.id, @question.kpi_ids.include?(kpi.id), "data-category" => kpi.id 
      = kpi.name 
    .form-group 
     = f.submit(class: 'btn btn-default', value: "Save") 

但連接表kpiquestion有一個附加屬性weight。該屬性也應該添加到表單中,並使用text_field_tag。事情是這樣的:

= text_field_tag "question[kpi_ids][:weight]", kpi.weight, @question.kpi_ids.include?(kpi.id), "data-category" => kpi.weight 

顯然,這是不行的,因爲它現在返回一個錯誤說kpi沒有叫weight屬性。那麼如何將這個屬性添加到表單中?

+0

你應該看看[fields_for(http://apidock.com/rails/ActionView/Helpers/FormHelper/fields_for)方法。 –

+0

[Rails嵌套窗體與has \ _many:through,如何編輯連接模型的屬性?]的可能重複(http://stackoverflow.com/questions/2182428/rails-nested-form-with-has-many-through - 如何對編輯的屬性-的聯接模型) – Marcus

回答

1

一種方法是將整個form_for變成一個form_tag,傳遞給相關控制器中的post請求,然後限制你可以傳遞哪些參數的唯一方法就是你選擇的參數,以允許controller-側。顯然這違反了約定,但對於這種情況很適用。

下面是該代碼將變爲:

= form_tag question_index_path, :method => :post do 
= render "layouts/form_messages", target: @question * 
.form-group 
    = label_tag "Name" 
    = text_field_tag :name 

.form-group 
    =label_tag :weight 
    =text_field_tag :weight 

.form-group 
    =label_tag "KPI's" 
    = hidden_field_tag "question[kpi_ids][]", nil 
    - @kpis.each do |kpi| 
    %li.checkbox 
     = check_box_tag "question[kpi_ids][]", kpi.id, @question.kpi_ids.include?(kpi.id), "data-category" => kpi.id 
     = kpi.name 

.form-group 
    =submit_tag("Save", class: btn btn-default) 
相關問題