【问题标题】:Rails - f.collection_select showing but not selecting the valueRails - f.collection_select 显示但不选择值
【发布时间】:2016-09-01 08:17:12
【问题描述】:

您好 StackOverflow 用户, 我目前正在创建一个搜索表单,
我想要一个包含可用书籍列表的 collection_select。

用户得到了书籍,并且一个 Join 表正在链接它们

2 个型号:User / Book
连接表:Book_User 并且a对双方都有很多关系

用户模型:

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 accept_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 =&gt; params[book_name] 选项。

集合选择是否正确编写?

我认为我应该做一个 f.collection_select ,我在一个表单中,但我在属性方面很挣扎。 我希望有人能在这方面帮助我:)

非常感谢,

马丁

【问题讨论】:

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


    【解决方案1】:

    您必须将 book_id 传递给 selected 而不是 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) %>
    

    【讨论】:

    • 它正在工作,我没有错误,但请求中未考虑所选值。我会继续寻找;)
    • 我把它作为控制台中的参数'Parameters: {"utf8"=>"✓", ... , "book"=>{"book_name"=>"4"}, " commit"=>"Search"} 我猜它会返回一个名称的 ID,并且搜索需要一个带有书名的字符串
    • 如果我可以有这个参数 "book_name"=>"bookTitle" 它将起作用,我很接近;),谢谢你的回答 btw
    猜你喜欢
    • 1970-01-01
    • 2023-03-04
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 2017-11-11
    • 2010-10-20
    • 1970-01-01
    • 2021-09-30
    相关资源
    最近更新 更多