2013-08-28 33 views
1

红宝石版本:2.0Rails的形式助手不读问号为对象属性

的Rails版本:4.0

我有一个控制器Question,其具有用于一个模型Answer嵌入形式。

question.rb

class Question < ActiveRecord::Base 
    has_many :answers, :dependent => :destroy 
    accepts_nested_attributes_for :answers, :allow_destroy => true 
end 

answer.rb

class Answer < ActiveRecord::Base 
    belongs_to :question 
end 

答案迁移

class CreateAnswers < ActiveRecord::Migration 
    def change 
    create_table :answers do |t| 
     t.string :text 
     t.integer :question_id 
     t.boolean :correct? 

     t.timestamps 
    end 
    end 
end 

在形式中,当编辑或创建新问题 - 用户最多可以输入4个可能的答案,并标记“正确”答案的复选框。

/views/questions/_form.html.erb

<%= form_for(@question) do |f| %> 
    <div class="field"> 
    <%= f.label :text %><br> 
    <%= f.text_area :text %> 
    </div> 

    <p>Enter up to 4 posisble answer choices.</p> 
    <%= f.fields_for :answers do |answer| %> 
    <div class="field"> 
     <%= answer.text_field :text %> 
     <%= answer.check_box :correct? %> 
    </div> 
    <% end %> 

    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

从questions_controller.rb

def new 
    @question = Question.new 
    4.times { @question.answers.build } 
    end 

private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_question 
     @question = Question.find(params[:id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def question_params 
     params.require(:question).permit(:text, :quiz_id, answers_attributes: [:id, :text, :correct?]) 
    end 

最后相关片段 - 在我的问题

上面列出的所有东西都很完美直到我添加了复选框answer.correct?。当我提交的形式是我在日志中得到这个消息:

Unpermitted parameters: correct 
Unpermitted parameters: correct 
Unpermitted parameters: correct 
Unpermitted parameters: correct 

怪异......肯定是在该参数的结尾问号。允许这个通过没有问号是编辑控制器允许的参数让我这个错误信息:

unknown attribute: correct(这一个实际上抛出一个错误消息,我不必去挖日志找到)

我该如何获得表单助手来读取问号?

+1

我不确定列名是否支持'?'。 – cortex

回答

1

?不是包含在列名中的有效字符。首先,创建一个新的数据库迁移:

# from command line 
rails generate migration ChangeCorrectInAnswers 

重命名列从correct?correct

# in the resulting migration 
class ChangeCorrectInAnswers < ActiveRecord::Migration 
    def up 
    rename_column :answers, :correct?, :correct 
    end 
end 

运行迁移:

# from command line 
rake db:migrate 

最后,从现场移除?在查看:

# app/views/questions/_form.html.erb 
<%= answer.check_box :correct %> 
+0

你错过了一个逗号后:回答 –

+0

@DannySantos修复,谢谢。 – zeantsoi