accept_attributes_for是否必须与has_一起使用

时间:2015-11-24 22:14:22

标签: ruby-on-rails activerecord

我正在阅读文档中的http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html,并试图找出包含" accepts_attributes_for"的模型。只有在拥有记录或许多记录时才能使用...

我的背景是t-sql中的一段时间,所以我努力使用" ruby​​魔法" ...因为有时魔法太模糊了,所以我是要求某人拼出以下这个例子是否允许...而不是使用" has_many"或者"拥有",我使用" belongs_to"因为它是一个交叉链接表。

class Postteam < ActiveRecord::Base
   belongs_to :post
   belongs_to :team

   accepts_nested_attributes_for :posts
   accepts_nested_attributes_for :teams
end

1 个答案:

答案 0 :(得分:0)

不,它不必,但你必须得到复数匹配。您目前有belongs_to :post(单数)但accepts_nested_attributes_for :posts(复数)......

应该{​​{1}}(单数)匹配

或者,使用:accepts_nested_attributes_for :post

如果通过&#34;交联表&#34;你的意思是一个连接表(例如,将帖子加入团队),模型实际上有has_many :postspost_id然后使用第一个例子。您对帖子和团队都进行了team_id更正,您需要告诉belongs_to它只接受单个帖子和单个团队的属性(因此使用accepts_nested_attributes_for和{分别为{1}}。

如果你使用复数词,例如:post,那么Rails希望接受一系列的帖子。如果只有一个帖子。然后使用singluar :team

滑轨&#39;使用复数是非常直观的,只要你被告知它首先出现在那里的原因。 :)

HOWEVER ... Rails也有连接表的约定,我想你可能会遗漏一点点。 我不能强烈建议您在阅读之前阅读Rails Guides(不仅仅是api文档)以了解Rails约定。如果您违反Rails约定,那么您将会对它进行斗争。如果你与Rails惯例保持一致 - 这将是一次顺畅而轻松的旅行。