【问题标题】:Rails 3 Create method using nested resources?Rails 3使用嵌套资源创建方法?
【发布时间】:2012-06-18 20:15:10
【问题描述】:

如何使用 rails 3 的功能来清理这个问题?我有一个属于一个组和一个用户的帖子。组和用户 has_many 帖子。我正在使用嵌套资源

resources :groups do
    resources :posts
end



<%= form_for @post, :url => group_posts_path(params[:group_id]) do |f| %>
....
<% end %>

 def create
   @group = Group.find(1)
   @post = @group.posts.build(params[:post])
   @post.user_id = current_user.id

   respond_to do |format|
      if @post.save
      .....
      end
   end
 end

谢谢。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 nested has-many form-for


    【解决方案1】:

    在您的模型中使用accepts_nested_attributes_for 方法。

    如果您不熟悉嵌套表单,请查看 this railscastthe second part 了解更多信息。

    【讨论】:

      【解决方案2】:

      在视图中:

        <%= form_for [@group, @group.posts.build] do |f| %>
          ...
        <% end %>
      

      在控制器中:

        class PostsController < ApplicationController
          before_filter :find_group
          ...
          def create
            @post = @group.posts.build(params[:post])
            current_user.posts << @post
          end
      
          protected
          def find_group
            @group = Group.find(params[:group_id])
          end
        end
      

      【讨论】: