2014-02-14 30 views
0

这里是我的模型:拥有属于许多可通过保存和更新

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。

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

我试图用simple_form,使这个:

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

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

日志说:

“不允许的参数:exam_status_ids”

最后我的控制器,这是由 “脚手架” 生成默认情况下,更新是:

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

当您检查状态,你想怎样呢?你没有指定任何可能与检查或验证有关的任何内容或任何东西 – Geoffroy

+0

我并不是在寻找实际验证。当我试图通过编辑页面的复选框更新Exam和ExamStatus关系时,它不会更新。日志中写着“未经许可的参数:exam_status_ids” – msdundar

+0

我并没有谈论验证,只是我不知道你的复选框是什么。 – Geoffroy

回答

0

从你的日志说什么,你应该允许参数时,在控制器:

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

不要忘了在允许呼入添加其他参数!

然后你就可以在你的控制器的操作使用方法:

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

你可能还应该写,允许参数在控制器内完成:) – devanand

+0

@devanand谢谢! – Geoffroy

+0

我更新了代码并添加了我的控制器文件。我不确定你的代码“@ examination.update_attributes!examination_params”在我的控制器中的位置。 – msdundar