セレクトボックスの要素をDBから取得する
viewでこんな感じに書くと
<% form_for(@sample) do |f| %> <%= f.select :user_id, User.find(:all).collect {|u| [ u.name, u.id ] } %> <%= f.submit "create" %> <% end %>
こんなHTMLになる
<form action="/samples" class="new_sample" id="new_sample" method="post"> <div style="margin:0;padding:0"> <input name="authenticity_token" type="hidden" value="6ef8be486192d0e8591cbd7f1f39128f84ee39e2" /> </div> <select id="sample_user_id" name="sample[user_id]"> <option value="1">user1</option> <option value="2">user2</option> <option value="3">user3</option> <option value="4">user4</option> <option value="5">user5</option> </select> <input id="sample_submit" name="commit" type="submit" value="create" /> </form>
viewに処理を書くのはあれなので
・view
<% form_for(@sample) do |f| %> <%= f.select :user_id, @users %> <%= f.submit "create" %> <% end %>
・controller
def new @sample = Sample.new @users = User.find(:all).collect {|u| [ u.name, u.id ] } respond_to do |format| format.html # new.html.erb format.xml { render :xml => @sample } end end
てな感じが吉。
追記
viewとcontrollerに分けてると、validateで引っかかってviewに戻ってきたときに、値が渡されない事に気づいた><
おとなしくviewに書いてた方が楽チン。かも。