セレクトボックスの要素を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に書いてた方が楽チン。かも。