以下是我的模特:
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
答案 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