我有一个共享部分使用select
字段和options_for_select
,但没有将正确的参数传递给控制器。
在users_controller.rb中,视图页面为user_home.html.erb:
def user_home
if user_signed_in?
@user = current_user
@cpe_event = CpeEvent.new
end
end
在我的cpe_events_controller.rb中,我有一个#create动作:
def create
@cpe_event = CpeEvent.new
@user = current_user
@cpe_event = current_user.cpe_events.build(cpe_event_params)
...
数据由form_for提交 - 共享部分(由users_controller视图呈现) - 有几个赞助商的下拉列表可供选择。我应该补充说,这是使用jQuery链接的三个下拉列表中的一个:
<%= form_for @cpe_event, url: cpe_events_path, method: :post,
html: { multipart: true }, class: 'form-inline form_for form_for_content' do |f| %>
<div>
<div class="col-sm-3 col-md-3" style="float: left;">
<% f.label :sponsor_name %>
<%= f.select :sponsor_name, options_for_select(@sponsor_names), {},
{ class: "sponsor_name form-control btn-default", name: "sponsor_name"} %>
</div>
....
我怀疑问题是f.select
而不是f.text-field
- 以及如何使用form_for正确提交该数据。
我在@cpe_event = current_user.cpe_events.build(cpe_event_params)
的{{1}}行上收到此错误:
cpe_events_controller.rb
允许的参数代码是:
param is missing or the value is empty: cpe_event
如果我在def cpe_event_params
params.require(:cpe_event).permit(....
之后放置raise params.inspect
,我会收到提交的参数的哈希值:
def create
这就是为什么我收到400错误,即它不包含
{"utf8"=>"✓", "authenticity_token"=>"u1...1g==", "sponsor_name"=>"WI - TEST",
"class_date"=>"2014-01-01", "title"=>"How Account", "commit"=>"Submit",
"controller"=>"cpe_events", "action"=>"create"}
我尝试使用符号`"cpe_event" => {"sponsor_name"=>"WI - TEST", "class_date"=>"2014-01-01",
"title"=>"How Account"...`
而不是模型对象:cpe_event
提交表单但没有运气。
如何更正代码以提交正确/格式正确的参数?谢谢!
答案 0 :(得分:0)
问题涉及在导轨/导轨表格(form_for
)上使用红宝石,select
和options_for_select
在提交时会引发param is missing error
。选择是使用jQuery Chained Selects Plugin链接的。链接终点导致Clark用这些解决方法解决的params错误:
如果您想保留HTML和插件设置,可以使用以下两种选项。
在JQuery中 - 正如我在下面的评论中所说,你应该为cpe_event的特定输入添加一个类,ex cpe_event_param
并使用$('.cpe_event_param')
代替$('input')
$('form').submit(function() {
$('input').each(function() { //should probably use a class for this so you only do it to specific inputs
$(this).attr('name', 'cpe_event[' + $(this).attr('name') + ']');
});
});
或在rails中 -
def cpe_event_params
cpe_event = Hash.new
params.each do |k,v|
cpe_event[k] = v
end
params[:cpe_event] = cpe_event
#everything else you had