2012-03-23 105 views
0

Rails新手在這裏掙扎着一個小項目。我正在爲喜歡作爲練習的棋盤遊戲創建一個簡單的造船工具,而且我有點迷路。需要幫助建立模型之間的關係

我想要做什麼? - 創建我的Ship模型記錄後,我想創建將與Ship模型關聯的Traits模型記錄。更新Ship模型記錄後,我想更新或創建將與Ship模型記錄關聯的Traits模型。

我試過了什麼? - 將特徵添加到每個Ship模型記錄中作爲列變量。我不認爲這是存儲我的每個船模特徵的最有效的方式。我有一個特質模型設置,但我不知道如何導航到它並將其與我的船模相關聯

完成後我想要什麼? - 即存儲在每個船舶模型記錄,將列出的屬性爲每個船與它們的對應的值的數組,

即,如果

trait_list = [trait1 => t1時,trait2 => t2時,trait3 = > t3,trait4 => t4]

ship_traits = [t1,t4]。

最後,我可以在我的船舶圖表頁面上調用特徵,而不必遍歷每一個特徵,只是與當前模型相關的特徵。

我迷失在我應該如何建立模型之間的關聯。對我應該研究的方向提供任何幫助或友好建議將受到熱烈歡迎。我提前道歉,因爲我的模糊性,再次我是一個完整的新手。

乾杯, 尼克

回答

1

我不是100%肯定這將解決您的問題,但你可以做這樣的事情:

class Ship < ActiveRecord::Base 
    has_many :traits 
    accepts_nested_attributes_for :traits 
end 

class Trait < ActiveRecord::Base 
    belongs_to :ship 
end 


# In your form 
- form_for @ship do |f| 
    - f.fields_for :traits do |ff| 
    = ff.label :trait_name 
    = ff.text_field :trait_name 

# this will return all the traits for model defined as @ship 
@ship.traits 

我知道這不是船舶模型中的數組,但我聽說將模型中的列設置爲數組有點棘手。如果你想要這些特質是獨一無二的(因爲在許多船舶上可以有很多特質,而且這些特質可以屬於許多不同的船隻),那麼你將會擁有一種「has_many:through」關係。如果是這樣的話,讓我知道,我會再次回答。或者你可以看看這個:http://guides.rubyonrails.org/association_basics.html

+0

Seanpat,我認爲這非常接近我所期待的,非常感謝你。我試過這個,並收到一個錯誤,指出我的traits表沒有ship.id列。所以我想我必須爲此進行遷移。根據您的示例,關聯基礎知識的鏈接更有意義。再次感謝。 – 2012-03-23 03:49:47