2012-12-12 33 views
1

我的確是有點小白,所以這可能是一些簡單的我俯瞰,但是,我已經做了搜索,試圖找到一個解決方案已經空了。內存(十六進制)地址返回,而不是價值的Rails

我已經建立了使用具有5個輸入字段formtastic形式:其中兩個文本框和三個是選擇列表。

<%= semantic_form_for @player do |f| %> 
<%= f.inputs do %> 
    <%= f.input :firstname, :label => "First Name " %> 
    <%= f.input :lastname, :label => "Last Name " %> 
    <%= f.input :leagueid, :as => :select, :collection => League.all(:order => :leaguename), :label => "League " %> 
    <%= f.input :team_1, :as => :select, :collection => Team.all(:order => :name), :label => "Team 1 " %> 
    <%= f.input :team_2, :as => :select, :collection => Team.all(:order => :name), :label => "Team 1 " %> 
<% end %> 
    <%= f.actions %> 
    <% end %> 

發生的事情是團隊列表完美工作(顯示團隊名稱)。然而,聯賽名單是一個不同的故事。所有在列表中的條目是這樣的(具有不同的後不同的代碼「聯賽:」):

#<League:0x007fe29c406498> 

如果我使用的形式來創建一個播放器,它工作正常。正確的聯盟ID進入數據庫和一切。我無法弄清楚爲什麼這些球隊的名字會顯示出來,而無論這是否是聯盟的表現。

任何和所有的幫助表示讚賞。

回答

2

當對象轉換成字符串,紅寶石將它們轉換成內存地址就像你看到的,除非你進行字符串轉換提供了to_s方法。我沒有使用過formtastic,但我相信在你的League類中增加一個to_s的方法應該讓它顯示你想要的。

嘗試增加

def to_s 
    @name # use whatever you want to be displayed. 
end 

到聯盟一流。

+0

感謝您的回覆。我曾嘗試將.to_s添加到League.all,但這導致列表中沒有任何內容出現。 然後我嘗試添加你提供的def(使用@leaguename,這是列名),但它沒有改變結果。 –

+0

我明白了。我添加了一個單獨的答案,採取了非常不同的方法。希望能幫助到你。好奇球隊的選擇如何運作良好,但不是聯賽。 –

+0

你知道,這也是讓我瘋狂的原因!事實上,在我輸入我的答覆之後,我想到了將聯盟放在哪裏並且改變的想法:leaguename改爲:名字,而不改變其他任何東西,並且工作正常。這三支隊伍都出現在這三個地方。我猜這應該是一個數據庫問題。我可能會重建桌子,看看會發生什麼。 –

0

你可以嘗試明確指定應該作爲選擇列表中的文本和id字段。我相信它看起來像。

<%= f.input :leagueid, :as => :select, :collection => Hash[League.all.map { |league| [league.leaguename, league.id] }] 

語法很瘋狂。對地圖的調用返回一個名稱/ ID對的數組,如[ ['league1', 1], ['league2', 2] ]。調用Hash就可以將它轉換爲散列,如{'league1' => 1, 'league2' => 2}。看起來像選擇列表應該使用這個散列填充自己。

有在http://rdoc.info/github/justinfrench/formtastic這樣的一個例子,在Usage部分。

+0

我剛試過這個,它工作!非常感謝你的幫助。我仍然會深入研究它,因爲我很好奇爲什麼它第一次不起作用。再次感謝。 –

+0

好聽。我的猜測是formtastic尋找名爲'name'的字段並將其用作列表中的文本描述。這可能解釋了爲什麼球隊工作,但聯賽沒有。我注意到有一個:member_label選項可能會幫助你。看起來像這樣:'<%= f.input:leagueid,:as =>:select,:collection => League.all(:order =>:leaguename),:label =>「League」,: member_label =>:leaguename%>'。如果這個答案對您有幫助,請將其標記爲正確,以便在我發佈的其他答案之前顯示,但沒有幫助。 –

0

:MEMBER_NAME是解決方案,我認爲。

<%= f.input :leagueid, :as => :select, :collection => League.all(:order => :leaguename), :label => "League " %> 

可能會爲你工作作爲

<%= f.input :leagueid, :as => :select, :member_name => :league, :collection => League.all(:order => :leaguename), :label => "League " %> 

我的問題是我有一個字段的名稱相同的模型的模型,我覺得困惑Formtastic

例支架:

rails g scaffold Countries code:string country:string 
    rails g scaffold Types title:string description:string 

型號:

class Sign < ActiveRecord::Base 
attr_accessible :title, :country_id, :type_id 
belongs_to :country 
belongs_to :type 

表單視圖:

<%= f.input :type %> 
<%= f.input :country, :member_label => :country %> 

有沒有member_label形式導致對象ID選擇框中顯示了國家雖然ID正確保存。類型選擇工作完美無需聲明member_label。 請注意,我並不需要指定:as => :select,因爲formtastic可以從belongs_to關係中推導出此值。

相關問題