2016-09-01 46 views
0

您好StackOverflow用户, 我目前正在创建一个搜索表单,
,我想有一个collection_select可用的书籍列表。Rails - f.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_user小号 accepts_nested_attributes_for:用户

形式正在与标准领域的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,即时通讯的形式,但我与属性斗争。 我希望somenone能帮助我的那部分:)

很多感谢,

马丁

回答

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) %> 
+0

它的工作,我没有错误,但没有考虑到请求中所选的值。我将继续搜索;) –

+0

我把它作为控制台参数中的参数:{“utf8”=>“✓”,...,“book”=> {“book_name”=>“4”},“commit “=>”搜索“}我想它返回一个名称的ID和搜索期望的书名字符串 –

+0

如果我可以有这个参数”book_name“=>”bookTitle“它会工作,我是关闭;),感谢您的答案btw –