我有一个Rails 4应用程序,我试图将从表单捕获的params [:search]传递给控制器,最终传递给js.erb文件,但哈希值不会通过。
sessions_controller.rb:
def home
@persons = People.select("persons.name").where("persons.name LIKE ?", params[:search])
respond_to do |format|
format.html
format.js { render :template => 'sessions/home.js.erb' }
end
end
home.html.erb:
<%= @persons.to_sql %>
<%= form_tag home_path, :method => 'get' do %>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search", :name => nil %>
<% end %>
<div id="persons">
</div>
_person_list.html.erb:
<%= person.name %><br>
home.js.erb文件:
$('#persons').html("<%= escape_javascript(render partial: 'person_list', collection: @persons, as: 'person') %>");
console.log("<%= @persons.to_sql %>");
home.html.erb会产生以下SQL代码段(预期):
WHERE (persons.name LIKE 'john')
但是,从js.erb文件中的代码,开发人员控制台产生以下结果:
WHERE (persons.name LIKE NULL)
如果我用'john'替换我的控制器中的params [:search],或者我设置了params [:search] ='john',那么视图文件和js.erb文件将产生相同的SQL片段。此外,如果我在控制器中省略.where statemnt,代码也可以工作,我相信问题与使用params [:search]有关。使用上面的代码,我可以确认该网址包含:
www.website.com/home?search=john
并且调试容器显示:
--- !ruby/hash:ActionController::Parameters
utf8: ✓
search: john
controller: sessions
action: home
我已经尝试过params [:search] .to_s,但这似乎也不起作用。
有人可以告诉我如何将params [:search]的值传递给js.erb文件吗?谢谢!
答案 0 :(得分:2)
使用浏览器开发人员工具中的“网络”面板检查您对.js.erb
视图所做的AJAX请求。我想你会发现你没有传递search
参数的值。
如果JavaScript的修复程序不明显,请继续将其添加到您的问题中,我们可以帮助您进行调试。