【问题标题】:Rails - passing params hash to js.erb fileRails - 将参数哈希传递给 js.erb 文件
【发布时间】:2014-08-19 22:35:02
【问题描述】:

我有一个 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 sn-p(这是预期的):

WHERE (persons.name LIKE 'john')

但是,从 js.erb 文件中的代码,开发者控制台会生成以下内容:

WHERE (persons.name LIKE NULL)

如果我将控制器中的 params[:search] 替换为 'john',或者如果我设置 params[:search] = 'john',则视图文件和 js.erb 文件会产生相同的 SQL sn-p。此外,如果我在控制器中省略 .where 语句,代码也可以正常工作,我相信问题与使用 params[:search] 有关。使用上面的代码,我可以确认 url 包含:

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 文件?谢谢!

【问题讨论】:

  • 你能输入你设置 params[:search] 值的代码吗?
  • @Mohamed - params[:search] 值通过表单提交。我将使用适当的代码更新问题。
  • @Iceman - 我在 home.js.erb 上列出了一堆名字,并有一个搜索框,允许用户搜索名字以过滤结果。我遇到的问题是我的 sql 查询没有返回正确的结果,这就是我正在调查“@persons.to_sql”的原因......结果发现,我看到的 home.html.erb 与 WHERE 子句不同. 来自 home.js.erb 的结果。
  • 尝试使用params['search'],不使用.to_s
  • 刚试过 params['search'], params["search"] 没有 .to_s 但没有运气。

标签: sql ruby-on-rails ajax hash params


【解决方案1】:

使用浏览器开发者工具中的“网络”面板检查您向.js.erb 视图发出的 AJAX 请求。我想您会发现您没有为 search 参数传递值。

如果您的 JavaScript 修复不明显,请继续将其添加到您的问题中,我们可以帮助您进行调试。

【讨论】:

  • 詹姆斯 - 你完全正确。该错误与问题中列出的代码无关。相反,它与我在我的 javascript 文件中进行的 AJAX 调用有关——我没有将搜索参数传递给 AJAX 调用(我在网络面板中注意到,因为那里列出的 url 缺少搜索参数)而该参数是为 html 响应传递的。额外 +1 向我展示了另一种调试技术。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-16
  • 2019-04-10
  • 2011-08-25
  • 1970-01-01
  • 1970-01-01
  • 2012-05-18
  • 2013-09-04
相关资源
最近更新 更多