2012-12-06 46 views
0

相當新的工作仍然是回報率......我現在大規模困惑如何實現以下目標:hidden_​​field有兩種型號

我已經在我的應用程序/視圖/ packjobs/_form.html.erb

以下
<td><%= f.collection_select(:pj_packer, @packers, :p_name, :p_name, { :include_blank => true}) %></td> 
<%= f.hidden_field :packer_id, :value => @packers.id %> 
<td><%= f.text_field :pj_guestpacker %></td> 

我有兩個模型打包機和packjobs。

class Packjob < ActiveRecord::Base 
    belongs_to :packer 
end 

class Packer < ActiveRecord::Base 
    has_many :packjobs 
end 

我下令控制器中的包裝員列表,並認爲這可能是導致問題的原因。

# GET /packjobs/new.xml 
    def new 
    @packjob = Packjob.new 
    @datestamp = Time.now.strftime("%m/%d/%Y %I:%M:%S %P") 
    @packers = Packer.find(:all, :conditions => { :p_team => "t" }, :order => "p_name") 
    @rigs = Rig.find(:all, :conditions => { :rig_status => "t" }, :order => "rig_type_number") 

    respond_to do |format| 
     format.html # new.html.erb 
     format.xml { render :xml => @packjob } 
    end 
    end 

爲packjobs的模式如下:

-- Describe PACKJOBS 
CREATE TABLE "packjobs" (
    "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
    "pj_packer" VARCHAR(255) NOT NULL, 
    "pj_guestpacker" VARCHAR(255), 
    "pj_rig_type_number" VARCHAR(255), 
    "pj_damage" VARCHAR(255), 
    "pj_extranotes" VARCHAR(255), 
    "created_at" DATETIME, 
    "updated_at" DATETIME 
, "packer_id" integer) 

我能夠填充帕克名字下拉:pj_packer;但我想將封裝器ID傳遞給:packer_id。

我不斷收到:NoMethodError in Packjobs#new undefined method 'id' for #<Array:0xa32828c>

編輯:

理想情況下,我想一個隱藏字段來捕獲所選擇的封隔器的ID。

+0

的錯誤是明智的。 @packers是一個數組,它沒有'id'方法。 – Yanhao

+0

如何解析@packers數組中的ID? – paulywill

+0

沒有一個'id',因爲它是'Packers'的列表。 –

回答

0

的數據模型是rootof問題。 pj_packerpacker_id正在不同領域捕獲相同的信息。您想要刪除pj_packer字段並只使用關係(packer_id)。

那麼你的看法變成:

<td><%= f.collection_select(:packer_id, @packers, :p_name, :p_id, { :include_blank => true}) %></td> 
<td><%= f.text_field :pj_guestpacker %></td> 

然後,當你需要老pj_packer值,你可以調用@packjob.packer.p_name而不是@packjob.pj_packer得到相同的值,而無需額外的領域。

如果你仍然需要保持pj_packer領域的其他原因,你可以在保存之前回調設置:

class Packjob < ActiveRecord::Base 
    belongs_to :packer 

    before_save :set_pj_packer 

    def set_pj_packer 
    self.pj_packer = packer.try(:p_name) 
    end 
end 
+0

非常感謝你! – paulywill

+0

我將在before_save中添加一些技巧! – paulywill

0

嘗試:

<td><%= f.select :packer_id, options_from_collection_for_select(@packers, :id, :p_name, @packjob.packer_id), :include_blank => true %></td> 
<td><%= f.text_field :pj_guestpacker %></td> 
1

下面將肯定工作。

<%= f.select :packer_id, :options_for_select(@packers.map{|p| [p.p_name,p.id]}), {:include_blank => true}%>

相關問題