0

year_id という名前の映画テーブルの移行を作成しました。2012 年と 2013 年という 2 つの新しい年を作成するときに、ドロップダウンを追加して年を選択すると、次のようになります。

#< Year:0x000 などではなく、実際の年 (2012 または 2013) をドロップダウン選択で表示するにはどうすればよいですか?

これは私のモデルです:

class Year < ActiveRecord::Base
    attr_accessible :year 
    has_many :movies
end 

これは私のフォームです:

<%= semantic_form_for @movie, :html => { :multipart => true } do |f| %> 
  <% if @movie.errors.any? %> 
    <div id="error_explanation"> 
      <h2>
        <%= pluralize(@movie.errors.count, "error") %> prohibited this movie from being saved:
      </h2> 
      <ul> 
        <% @movie.errors.full_messages.each do |msg| %> 
          <li><%= msg %></li> 
        <% end %> 
      </ul>
    </div> 
  <% end %> 
  <div class="field"> <%=h f.input :year, :include_blank => false %> </div><br />
4

1 に答える 1

1

フォームの完全なコードを確認しないと、質問に正確に答えることは困難です。ただし、実際に起こっているのは、実際のインスタンスがYearオプション テキストとして渡されていることです。to_sコンソールから呼び出した場合、おそらく同様の出力が表示されるでしょう。

Year.first.to_s
# => "#<Year:0x00000101bcea10>"

select 要素のオプションを適切に定義する方法については、 http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-options_for_selectoptions_for_selectドキュメントを参照してください。

collection_selectオプション配列を定義する手間を省くために、フォーム ヘルパーを使用することもできるようです。それはこのように見えるでしょう

<%= f.collection_select :year_id, Year.all, :id, :year %>

最後のオプション:yearは、オプション テキストに使用されるメソッドであるため、モデルにとって意味のあるものに変更します。

于 2013-05-07T20:05:36.517 に答える