【问题标题】:Rails - passing arbitrary parameters into searchRails - 将任意参数传递给搜索
【发布时间】:2014-09-04 16:21:04
【问题描述】:

我已通过 -

将值传递到搜索页面
<%= link_to 'add', users_path(bookto: @book.id) %>

在视图中和

@book = Book.find_by_id(params[:bookto])

在接收控制器动作中。

我的接收(索引)视图中有一个搜索表单

<%= form_tag users_path(params[bookto: @book.id]), method: 'get' do %>
  <p>
    <%= text_field_tag :search, params[:search] %>
    <%= submit_tag "Search", name: nil %>
  </p>
<% end %>

<%= "#{@book.id}, #{@book.title}" %>

<% if @users %>
    <%= render partial: 'layouts/showusers', locals: {users: @users} %>
<% end %>

当我导航到页面时

http://localhost:3000/users?bookto=1

@book 的值被正确传递。但是,当我执行搜索时,没有将参数传递给

http://localhost:3000/users?utf8=✓&search=mysearch

我没有传递参数。我不想在搜索中使用这个任意参数,我只想在搜索完成后使用它。我如何实现这一目标?我需要向我的控制器添加搜索操作吗?

【问题讨论】:

  • 如果不出意外,您可能希望使用@book.id 作为参数,而不是书籍的字符串表示形式。链接渲染如何?
  • 嗨 - @book.id 的好点,我已经做出了改变,并将更新问题。当我运行搜索时,它会出现“ActiveRecord::RecordNotFound in UsersController#index 找不到没有 ID 的书” - 谢谢,Dan
  • 这不是你的问题,但说@book = Book.find_by_id(params[:bookto])而不是@book = Book.find(params[:bookto])总是更安全:如果没有找到一本书,前者会将@book设置为nil,后者会爆炸。
  • 感谢 Max,很高兴知道,已相应更新。

标签: ruby-on-rails search ruby-on-rails-4


【解决方案1】:

为什么不像这样在搜索表单中添加一个隐藏字段

<%= form_tag users_path, method: 'get' do %>
  <p>
    <%= hidden_field_tag :bookto, @book.id %>
    <%= text_field_tag :search, params[:search] %>
    <%= submit_tag "Search", name: nil %>
  </p>
<% end %>

因为无论如何您都希望在您的 URL 中看到 bookid,所以这种方法在您的情况下是可以的。

【讨论】:

  • 谢谢,这似乎可以做到 - 我认为控制器正在获取价值是否正确?
  • @RADan 不确定你的意思。参数将传递给控制器​​,您可以通过params对象获取值
猜你喜欢
  • 1970-01-01
  • 2019-11-11
  • 1970-01-01
  • 2022-06-10
  • 2017-12-18
  • 2013-09-25
  • 2016-04-08
  • 1970-01-01
相关资源
最近更新 更多