2011-01-13 6 views
0

私のモデルオブジェクト(MyObjectなど)は1つのプロパティ(たとえば色)を持ち、 "color"プロパティは文字列のリストから来る文字列値を保持します(例:colors=['red','yellow', 'black'] )。初心者の質問:この関数でドロップダウンメニューを表示するには

今、myObjectのインスタンスをデータベースから取得し、ビューページに1行で表示すると、デフォルト値として現在の値をドロップダウンメニューに表示する必要があります。私のビュー・ページでこれをRails 3に実装する方法。

インスタンス「myObjectという」とリスト「色= [...]」

を説明してください(ユーザーがドロップダウンメニューから選択すると、後で、オブジェクトは、ユーザの選択に基づいて、DBに更新されます)

HAMLで

答えて

0

例:

%select{:name => 'color'} 
    %option{:value=> @my_object.color} 
    = @my_object.color 
    -Color::COLORS.each do |c| 
    %option{:value=>c.name} 
     =h c.name 

あなたはCOLORSと呼ばれるカラーモデルクラスの定数のリストを持っていると仮定すると、あなたが呼び出されたアクションから@my_objectをインスタンス化していることこのビュー。 html.erbで

例(この上で少しさび...):あなたはこのようなオブジェクトにロード

<select name="color"> 
    <option value="<%= @my_object.color %>"> 
     <%= @my_object.color %> 
    </option> 
    <% Color::COLORS.each do |c| %> 
     <option value="<%= c.name %>"> 
      <%=h c.name %> 
     <option> 
</select> 
+0

こんにちは、あなたのコードに従って、このエラーメッセージが表示されます。「不正なネスト:プレーンテキスト内のネストは不正です。」 16:%option {:value => "myObject.color"} 17:= myObject.color – Mellon

+0

これはhamlで動作します。選択タグはパーセント記号でなければなりません、このコースはエラーです。とにかく、ありがとう! – Mellon

+0

私はちょうどそれについて返答しようとしていました。混乱してごめんなさい、うまくいきました:D – Zkoh

1
# controller (app/controllers/my_objects_controller.rb): 
def edit 
    @my_object = MyObject.find params[:id] 
end 
# view (app/views/my_objects/edit.html.erb): 
<% form_for @my_object do |f| %> 
    <%= f.select :color, MyObject.colors %> 
    <%= f.submit %> 
<% end %> 
0

:ビューに次に

@my_object = MyObject.find(params[:id], :include => :colors) 

は、あなたが使用することができますフォームヘルパーを選択すると、次のようなドロップダウンリストが表示されます。

<%= f.select :color, @my_object.colors {|c| [c.name, c.id]}, :selected => @my_object.color %> 

これはおそらく編集フォームに表示され、私は、保存ボタンを押したときにまだ私のコントローラ、

select("my_object", "color", your_color_collection, { :include_blank => false })しかし:O以外のコントローラの更新アクションで何か特別なこと:

def update 
    @my_object = MyObject.find(params[:id]) 

    respond_to do |format| 
    if @my_object.update_attributes(params[:my_object]) 
     format.html { redirect_to(@my_object) } 
     format.xml { head :ok } 
    else 
     format.html { render :action => "edit" } 
     format.xml { render :xml => @my_object.errors, :status => :unprocessable_entity } 
    end 
    end 
end 
+0

[c.name、c.id]が含まれていない文字列のリストは何ですか?私はあなたの選択タグを試しましたが、それは私に空のオプションを示しています、私は私の色の.nameプロパティを持っていないためかもしれないと思います。私の色は文字列だからです。 – Mellon

0

私は、このようにフォームヘルパーを使用しました選択されたカラー値の代わりにデフォルトのカラー値を得ることができます。

私はコントローラにオブジェクトを渡すbutton_to("save", myobject_path(myobject), :method=>:put)を使用します。

側に私のコントローラ、更新方法:私はいつもの代わりに選択された一つのデフォルトのカラー値を取得する理由

class MyobjectsController < ApplicationController 
... 
def update 

    @myobject = myobject.find(params[:id]) 

    if @myobject.update_attributes(params[:myobject]) 
     puts @myobject.color #always get default value 
     redirect_to myobject_path 
    else 
     redirect_to myobject_path 
    end 
    end 
... 
end 

は、誰もが私を説明できますか?