2012-03-12 4 views
0

メニューのフィールドはいくつかのmysqlテーブルから来るデータであるドロップダウンメニューを作ることができますか?私はより良い説明:私は2つのモデル "ハードウェア" と "ブランド" をしたことを想定しているとしますRails 3.1ドロップダウンメニューと複数のデータ

class Hardware < ActiveRecord::Base 
belongs_to :brand 
end 

class Brand < ActiveRecord::Base 
has_many :hardwares 
end 

とそのハードウェアの移行を想定は次のとおりです。

class Hardwares < ActiveRecord::Migration 

def self.up 
    create_table "hardwares" do |t| 
    t.column "model", :string 
    t.column "id", :integer 
    t.column "brand_id", :integer 
    end 
end 

def self.down 
    drop_table "hardwares" 
end 

私はそれぞれのドロップダウンメニューの要素が次のようなものであることを望んでいます:

@hw=Hardwares.find(params[:id]) 

[@hw.brand.name,@hw.model] <- Dropdown menu's element 

私はこれを行うことができますか? ありがとうございます。

答えて

1

ハードウェアをプロジェクトに関連付けることはできますが、ハードウェアをリストする際には、モデル番号のリストを避けるためにブランド名を含めることができます。

更新:あなたのハードウェアモデルでは、次の定義:

def model_with_brand_name 
    "#{self.brand.name} #{self.model}" 
end 

は残念ながら、RailsのAPIドキュメントは、メソッドに直接リンク許可されていませんが、collection_selectは何をしたいです。フォームで

、次の方法を使用して、select要素のメニューを作成することができます

<%= collection_select :project_id, Hardware.all, :id, :model_with_brand_name %> 

これは、ハードウェアのために正しいものを選択することができ、すべてのブランド名を含むドロップダウンメニューを提供します。

+0

こんにちはロビン、そうです、私のモデルの名前はハードウェアです。私はよく説明する。 Projectという名前の別のモデルがあり、ドロップダウンメニューを使用して、「ハードウェア」オブジェクトを「プロジェクト」オブジェクトに関連付けることができます。 「hardware.model」または「hardware.brand.name」のみをドロップダウンメニューに含めると、最初のケースでは[9300,5700、C636、..]、[HP、Lexmark、シスコ、フォーティネット]を選択します。私が望むのは、ユーザーが[HP 9300、Lexmark 5700、Cisco C636、..]メニューの要素の中から選択できるかどうかです。 – Marco

+0

私は答えを更新しました。これは役に立ちますか? –

+0

ありがとう!私はすぐにそれを試してみます:D – Marco