2014-05-01 78 views
0

我寫我在Ruby中第一個應用程序on Rails的(我只通過railstutorial.org去之前),這是簡單的電子處方服務的「深度」和我在一件事情上運行,我可以」應付。多個控制器,兩個關係

我想創建添加新處方的表單以及添加屬於這個新創建處方的一些藥物。

第一個問題是 - 我怎麼能當實際填表處方尚不存在時對處方藥添加?我之前做的是我第一次創建處方@user.prescription.create(presc_attributes)和後來@prescription.relations.create(medicine_id)

現在我需要做的這可能是使用一個按鈕一種形式發送整個事情(一個HTML請求,對嗎?),除非你們已經得到更好的主意。我也在努力想出在哪裏實際上把方法創建這個處方。它應該在PrescriptionController#new還是連接到RelationsController#new?

我讀過幾篇關於嵌套fields_for的文章,但他們似乎並不完全符合我的需求。

如果我錯過了一些重要的事情,我真的對RoR很陌生。

這裏是我的能效比以及 http://i.stack.imgur.com/sa9CB.png

回答

0

UPDATE ---

啊啊啊我明白了,我想你想要的是與inverse_of的關係。

如果您在連接模型上使用belongs_to,最好在belongs_to上設置:inverse_of選項,這將意味着以下示例正常工作(其中標記是has_many:through關聯):

@post = Post.first 
@tag = @post.tags.build name: "ruby" 
@tag.save 

最後一行應該保存通過記錄(一個Taggable)。 inverse_of設置:如果這隻會工作

class Taggable < ActiveRecord::Base 
    belongs_to :post 
    belongs_to :tag, inverse_of: :taggings 
end 

如果不設置:inverse_of記錄,協會將盡最大努力本身匹配了正確的倒數。自動逆向檢測僅適用於has_many,has_one和belongs_to關聯。

FROM http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

+0

的事情是,我已經得到了充滿了藥品名稱,劑量等等。當創建新的處方我不希望創建藥劑表藥,我只是想創建連接某些處方某些藥物的關係所以我不確定'@medicine = @ prescription.medicines.new(medicine_params)'是否正確 – Herwish

+0

啊我看,我想你想要的是與inverse_of的關係。改變我的答案來反映這一點。希望這有助於。 – rsahai91

+0

我終於設法使用nested_attributes來做到這一點。現在我正在努力與另一個問題tho http://stackoverflow.com/questions/23461902/rails4-autocomplete-form-with-multiple-inputs-html-data-id-element-overwrite – Herwish