【发布时间】:2014-04-21 18:40:07
【问题描述】:
我一直在尝试构建一个搜索表单,允许用户通过选择下拉列表中的多个复选框选择进行搜索。问题是,当我提交表单时,这些值在最后一个空值的数组中传递,当我检查日志时,查询看起来像这样
UPDATE `searches` SET `ethnicity` = '---\n- Pacific Islander\n- White\n- Other\n- \'\'\n', `updated_at` = '2014-04-21 18:24:03' WHERE `searches`.`id` = 1
我不明白为什么我在每个表单值周围都有多余的字符。我正在使用简单表单,我的表单看起来像这样
<%= simple_form_for(:search, :url => {:controller => 'searches', :action => 'update', :slug => session[:username]}) do |f| %>
<%= f.error_notification %>
<%= f.input :ethnicity, :label => "Ethnicity", :collection => ["Asian","Black", "Hispanic/Latino", "Indian", "Middle Eastern", "Native American", "Pacific Islander", "White", "Other"], :include_blank => "Anything", wrapper_html: { class: 'form-group' }, :as => :check_boxes, :input_html => {:name => "search[ethnicity][]", :multiple => true}, include_hidden: false %>
<% end %>
根据我的理解,我的搜索控制器允许一个数组,并且由于我使用 Rails 4,我使用强参数
def search_params
params.require(:search).permit(:id, :user_id, :ethnicity => []) if params[:search]
end
我只是发布了不起作用的代码部分,因为我的表单还有其他字段,例如性别、身高、年龄等,但这些都可以正常工作。我只有在使用复选框时才会遇到问题。单选按钮和选择字段完美无缺。
这是提交时的完整搜索日志
Parameters: {"utf8"=>"✓", "authenticity_token"=>"WMR/U8ztPOb+Y8vGoAcP2Le5k8T5ZC02r0uoVdJMuSg=", "search"=>{"gender"=>"Female", "interested_in"=>"Men", "min_age"=>"22",
"max_age"=>"44", "ethnicity"=>["Pacific Islander", "White", "Other", ""],
"education"=>"", "income"=>"", "religion"=>"", "body_type"=>"", "min_height"=>"", "max_height"=>"", "smoke"=>"", "drink"=>"", "drugs"=>"", "exercise"=>"", "have_children"=>"",
"want_children"=>"", "pets"=>""}, "commit"=>"Search", "slug"=>"wahidp"}
Geokit is using the domain: localhost
User Load (0.5ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
Search Load (0.3ms) SELECT `searches`.* FROM `searches` WHERE `searches`.`user_id` = 1 LIMIT 1
(0.1ms) BEGIN
SQL (0.4ms) UPDATE `searches` SET `ethnicity` = '---\n- Pacific Islander\n- White\n-
Other\n- \'\'\n', `updated_at` = '2014-04-21 18:24:03' WHERE `searches`.`id` = 1
我完全是一个初学者,可能正在构建一些超出我的范围的东西,但我已经彻底研究了这个问题并且需要更多帮助。谁能解释为什么这不起作用以及我需要做什么?谢谢!
我尝试删除 :include_blank => "Anything" 但我收到了相同的日志输出
Processing by SearchesController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"WMR/U8ztPOb+Y8vGoAcP2Le5k8T5ZC02r0uoVdJMuSg=", "search"=>{"gender"=>"Female", "interested_in"=>"Men", "min_age"=>"22", "max_age"=>"44", "ethnicity"=>["Other", ""], "education"=>"", "income"=>"", "religion"=>"", "body_type"=>"", "min_height"=>"", "max_height"=>"", "smoke"=>"", "drink"=>"", "drugs"=>"", "exercise"=>"", "have_children"=>"", "want_children"=>"", "pets"=>""}, "commit"=>"Search", "slug"=>"wahidp"}
Geokit is using the domain: localhost
User Load (0.6ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
Search Load (0.4ms) SELECT `searches`.* FROM `searches` WHERE `searches`.`user_id` = 1 LIMIT 1
(0.1ms) BEGIN
SQL (0.3ms) UPDATE `searches` SET `ethnicity` = '---\n- Other\n- \'\'\n', `updated_at` = '2014-04-21 21:24:55' WHERE `searches`.`id` = 1
【问题讨论】:
标签: mysql ruby-on-rails forms simple-form