Rails - 显示但未选择值的f.collection_select

时间:2016-09-01 08:17:13

标签: ruby-on-rails ruby-on-rails-3

Hello StackOverflow用户, 我目前正在创建一个搜索表单,
我希望有一个collection_select,其中包含可用的书籍清单。

用户获得了书籍,并且连接表正在链接他们

2个型号:User / Book
联接表:Book_User 和双方有很多关系

用户模型:

has_many :games, :through => :book_users
  has_many :book_users
  accepts_nested_attributes_for :books

书籍模型    has_many:users,:through => :book_users    has_many:book_users    accepts_nested_attributes_for:users

表单正在使用Text_field_tag标准字段,结果正确(我需要book_name才能使其正常工作):

<%= form_tag search_path, :class => "webdesigntuts-workshop", method: :get do %>
  .... 
 <%= label :book_name, "" %>
      <%# text_field_tag :book_name, params[:book_name], placeholder: 'books' %>
      <%= collection_select(:book, :book_name, Book.all, :id, :name, prompt: true) %>
      <%= submit_tag "Search" %>
<% end %>

collection_Select显示书籍列表,但是当我选择书籍名称并单击提交按钮时,请求中不会考虑该书籍。我也尝试了:selected => params[book_name]选项。

集合选择是否正确写入?

我想我应该做一个f.collection_select,我在一个表单中,但我努力与属性。 我希望有人可以在那方面帮助我:)

非常感谢,

马丁

1 个答案:

答案 0 :(得分:0)

您必须将book_id传递给选定而非book_name。试试吧:

 <% book = Book.find_by name: params[:book_name] %>
 <%# text_field_tag :book_name, params[:book_name], placeholder: 'books' %>
 <%= collection_select(:book, :book_name, Book.all, :id, :name, {selected: book.try(:id)}, prompt: true) %>