Hello StackOverflow :), 我对表单中的Collection_Select有疑问。
首先,集合选择是Searchform中的过滤器,并且select的显示正常,问题是传递给请求的值。
在我有一个正常工作的text_field_tag之前:
<% text_field_tag :book_name, params[:book_name], placeholder: 'Book' %> #Text field Works
在控制台
中返回参数"Book_name"=>"Harry Potter"
集合的第二选择选择:
<%game = Book.find_by name: params[:book_name] %>
<% collection_select(:book, :book_name, Book.all, :id, :name, {selected: book.try(:id)}, prompt: true) %>
在控制台中返回:
"book"=>{"book_name"=>"2"}
,我愿意 喜欢和上面一样返回
"book_name" => "Name"
这是搜索控制器,也许我应该改变这个?
def search
if params[:book_name].present?
@searchs = User.joins(:books).where(books: {name: params[:books_name]}).near(params[:city], params[:distance] || 10)
elsif params[:city].present?
@searchs = User.near(params[:city], params[:distance] || 10).where("id != ?", current_user.id)
else
@searchs = User.none
我希望有人可以帮助我。我尝试了很多不同的方法但没有任何效果非常感谢提前!
答案 0 :(得分:1)
您正在返回:id
<% collection_select(:book, :book_name, Book.all, :id, :name, {selected: book.try(:id)}, prompt: true) %>
这样您就可以返回&#39;:姓名&#39;
<% collection_select(:book, :book_name, Book.all, :name, :name, {selected: Book.find_by_name(:name)}, prompt: true) %>
答案 1 :(得分:1)
<% f.collection_select(:book, :book_name, Book.all, :name, :name, your_options = {}, your_html_options = {} %>
(注意双:name
,第一个用于选项值,第二个用于选项文本)
但是,让我说,按名称进行搜索并不是最佳做法。通过字符串查询比使用id慢得多。所以,如果我是你,我会按原样保留collection_select
,我将使用这样的ID更改搜索:
@searchs = User.joins(:books).where(books: {id: params[:books_id]}).near(params[:city], params[:distance] || 10)
甚至
@searchs = User.joins(:books).where('book_id = ?', params[:book_id]).near(params[:city], params[:distance] || 10)
如果您有更多疑问,请查看collection_select
documentation