【问题标题】:Multiple models in the same form in Rails 3.1?Rails 3.1 中相同形式的多个模型?
【发布时间】:2011-09-02 22:49:46
【问题描述】:

我正在使用 Rails 3.1 并且正在讨论论坛。我有一个模型叫Topic,每个模型都有很多Posts。当用户创建一个新主题时,他们也应该创建第一个Post。但是,我不确定如何以相同的形式做到这一点。这是我的代码:

<%= form_for @topic do |f| %>
<p>
    <%= f.label :title, "Title" %><br />
    <%= f.text_field :title %>
</p>

<%= f.fields_for :post do |ff| %>
    <p>
        <%= ff.label :body, "Body" %><br />
        <%= ff.text_area :body %>
    </p>
<% end %>

<p>
    <%= f.submit "Create Topic" %>
</p>
<% end %>

class Topic < ActiveRecord::Base
  has_many :posts, :dependent => :destroy
  accepts_nested_attributes_for :posts
  validates_presence_of :title
end


class Post < ActiveRecord::Base
  belongs_to :topic
  validates_presence_of :body
end

...但这似乎不起作用。有什么想法吗?

谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 forms


    【解决方案1】:

    @Pablo 的回答似乎有你需要的一切。但更具体一点...

    首先在您的视图中更改此行

    <%= f.fields_for :post do |ff| %>
    

    到这里

    <%= f.fields_for :posts do |ff| %>  # :posts instead of :post
    

    然后在你的 Topic 控制器中添加这个

    def new
      @topic = Topic.new
      @topic.posts.build
    end
    

    这应该能让你继续前进。

    【讨论】:

      【解决方案2】:

      来自 Ryan Bates herehere 的一个很好的解释

      对于您的特定情况:当您调用 fields_for 时,您使用的是模型 (:post),而不是关联 (:posts)。

      还要检查&lt;%= ... %&gt; 的正确使用。在 rails 3.x 中,构造的行为发生了变化。块助手(form_for、fields_for 等)不需要它,而内联助手(text_field、text_area 等)确实需要它。

      【讨论】:

      • 感谢您的链接,但我正在寻找特定于我的问题的内容。
      猜你喜欢
      • 2018-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多