2014-03-27 64 views
-1

我有这样轨如何通过嵌套参数

params.require强大的参数(:调查).permit(option_booleans_attributes:[:ID,:survey_id,:话题:答案])

如果我使用的轨道f.input我喜欢的参数

“option_booleans_attributes”=> { “0”=> { “答案”=> “真”, “ID”=> “5” },“1”=> {“answer”=>“false”,“id”=>“6”},“2”=> {“answer”=>“true”,“id”=>“7” }}}

,但我需要显示option_booleans话题,让用户填写答案

<% @survey.option_booleans.each do |question| %> 
    <%= question.topic %><br> 
    <%= radio_button "option_booleans_attributes[]", "answer[#{question.id}]", "true" %>是 
    <%= radio_button "option_booleans_attributes[]", "answer[#{question.id}]", "false" %>否<br> 
    <% end %> 

但我不知道如何生成对参数的0 1 2 ..

我的survey.rb

class Survey < ActiveRecord::Base 
has_many :option_booleans 
accepts_nested_attributes_for :option_booleans 

belongs_to :member 

end 

类OptionBoolean <的ActiveRecord :: Base的
belongs_to的:survey03

和OptionBoolean有话题:字符串和答案:布尔

我想让用户看到的主题和更新的答案

+0

我不是你的意思是由什么不太清楚“生成参数0 1 2” - 你的意思是如何访问这些attroibutes? – nicohvi

+0

因为我使用强参数访问,它不能对应option_booleans – Steven

+0

现在我使用<%= radio_button“option_booleans_attributes [#{question.id}]”,“answer”,“true”%> 后端参数[:option_booleans_attributes] .each do | option_id,attributes |解决但这是一个好方法?这意味着我没有使用强参数 – Steven

回答

0

我现在用的是什么

<li><% @survey03.option_booleans.each do |question| %> 
    <%= question.topic %><br> 
     <%= radio_button "option_booleans_attributes[#{question.id}]", "answer", "true", :required => true %> 
     <%= radio_button "option_booleans_attributes[#{question.id}]", "answer", "false", :required => true %> 
    <% end %></li> 

和控制器

params[:option_booleans_attributes].each do |option_id, attributes|  

if option = OptionBoolean.find_by_id(option_id) 
     option.update_attributes(attributes) 
    end 
end 

,我知道如果我想生成指数只是使用

<% @survey.option_booleans.each_with_index do |question, index| %>   
     <%= question.topic %><br> 
     <%= radio_button "option_booleans_attributes[#{index}]", "answer[#{question.id}]", "true" %> 
     <%= radio_button "option_booleans_attributes[#{index}]", "answer[#{question.id}]", "false" %> 
    <% end %> 
0

它看起来你缺少你的表格的几个部分:

#app/controllers/surveys_controller.rb 
def new 
    @survey = Survey.new 
    @survey.option_booleans.build #-> creates ActiveRecord Object for your form 
end 

#app/views/surveys/new.html.erb 
<%= form_for @survey do |f| %> 
    <%= f.fields_for :option_booleans do |option| %> 
     <% @survey.question_booleans.each do |question| %> 
      <%= question.topic %> 
      <%= f.radio_button "answer[#{question.id}]", "true" %> 
      <%= f.radio_button "answer[#{question.id}]", "false" %> 
     <% end %> 
    <% end %> 
<% end %> 

虽然我不太相当站在你的系统如何工作

你有一个很多选项的调查,但你传递新的属性,每次创建新的选项。当然,你不得不option_booleans为连接模式,与options作为一个独立的模型,并且:

#app/models/survery.rb 
Class Survey < ActiveRecord::Base 
    has_many :option_booleans 
    has_many :options, through: :option_booleans 
end 
+0

我并不是说每次都要创建新的选项,如果我在后端创建,并且我想让用户看到option_booleans.topic:string并更新option_booleans.answer:boolean.So我认为它不需要在控制器中编译权限? – Steven

0

尽量选择选项是这样的:

@variable_with_booleans = [true, false] 
<%= f.select :param, @variable_with_booleans %> 

回答您的最新评论: 我不牛逼知道,但尝试编辑表单

<%= form_for @question do |f| %> 
    <%= f.label :topic %> 
    <% @variable_with_booleans = [true, false] %> 
    <%= f.select :answer, @variable_with_booleans %> 
    <%= f.submit %> 
<% end %> 

和控制器,它包含了这个动作编辑强烈PARAMS

+0

如果我想显示主题,我该如何添加此代码?我想显示option_booleans.topic并更新option_booleans.answer .. – Steven

+0

是你的主题取决于问题布尔? –

+0

是的,option_booleans有两列,主题(:字符串)和答案(:布尔) – Steven