通过保存和更新拥有并属于许多人

时间:2014-02-14 12:55:38

标签: ruby-on-rails

以下是我的模特:

class Examination < ActiveRecord::Base
    has_many :categorizations
    has_many :exam_statuses,  :through => :categorizations
end

class Categorization < ActiveRecord::Base
    belongs_to :examination
    belongs_to :exam_status
end

class ExamStatus < ActiveRecord::Base
    has_many :categorizations
    has_many :examinations, :through => :categorizations
end

我可以通过键入来从控制台分配关系而没有任何问题;

e = Examination.first
e.exam_status_ids = [1,2]

同样在examinations / index.html.erb文件中,我可以毫无问题地列出exam_statuses。

问题是,我无法从 examinations / _form.html.erb 文件更新或创建任何exam_status关系!

我正在尝试使用simple_form:

<%= f.association :exam_statuses,   as: :check_boxes, label: 'Sınavın Durumu' %>

它列出了所有状态和复选框,但没有更新它们。

日志说:

  

“未经许可的参数:exam_status_ids”

最后我的控制器(默认情况下由“scaffold”生成)进行更新:

  def update
  respond_to do |format|
  if @examination.update(examination_params)
    format.html { redirect_to @examination, notice: 'Examination was successfully updated.' }
    format.json { head :no_content }
  else
    format.html { render action: 'edit' }
    format.json { render json: @examination.errors, status: :unprocessable_entity }
  end
end
end

2 个答案:

答案 0 :(得分:0)

我认为在这种情况下你需要使用accepts_nested_attributes来更新它。 有关详细信息,您可以refer this article

答案 1 :(得分:0)

根据您的日志所说,您应该在控制器中允许参数:

def examination_params
  params.require(:examination).permit(:exam_status_ids)
end

不要忘记在许可证电话中添加其他参数!

然后你可以在控制器的动作中使用它:

def update
  ...
  @examination.update_attributes! examination_params
  ...
end