我正在用Ruby on Rails编写我的第一个应用程序(我以前只用过railstutorial.org ),这是一个简单的电子处方服务,我运行在一件我不能应付的事情上。
我想创建表单来添加新的处方,以及添加一些属于这个新创建的处方的药物。
第一个问题是-当填写表单时处方还不存在时,我如何向处方中实际添加药物?我之前做的是先用@user.prescription.create(presc_attributes)创建处方,然后用@prescription.relations.create(medicine_id)创建。
现在,我可能需要在一个表单上使用一个按钮(一个HTML请求,对吗?)除非你们有更好的主意。我也在苦苦思索一个想法,那就是在哪里创建这个处方的方法。它是否应该在PrescriptionController#new中,或者也可以连接到RelationsController#new?
我读过几篇关于嵌套fields_for的文章,但它们似乎并不完全符合我的需求。
我是RoR的新手,所以如果我错过了一些重要的东西,我很抱歉。
这也是我的EER,http://i.stack.imgur.com/sa9CB.png
发布于 2014-05-01 15:32:04
更新
啊,我明白了,我想你想要的是和inverse_of的关系。
如果您在join模型上使用belongs_to,最好在belongs_to上设置:inverse_of选项,这意味着下面的示例可以正常工作(其中标签是一个has_many :通过关联):
@post = Post.first
@tag = @post.tags.build name: "ruby"
@tag.save最后一行应该保存直通记录(一个可标记的)。只有在设置了:inverse_of的情况下才能执行此操作:
class Taggable < ActiveRecord::Base
belongs_to :post
belongs_to :tag, inverse_of: :taggings
end如果您不设置:inverse_of记录,该关联将尽最大努力将自身与正确的反向匹配起来。自动反向检测仅适用于has_many、has_one和belongs_to关联。
来自http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html
https://stackoverflow.com/questions/23403249
复制相似问题