由Rails中的用户发布到组页面

时间:2014-07-23 11:37:01

标签: ruby-on-rails

我有一个群组模型,并希望用户能够发帖。每个帖子都属于该特定组以及创建它的用户(之后,每个帖子都会有评论)。我以为我会选择导轨教程微博部分并调整它以适合我的模型(www.railstutorial.org/book/user_microposts)

现在,表单部分在组#show页面上可见,但我无法在不提供group.id的情况下在posts_controller中构建帖子,添加@group = Group.find(params [:id])创建操作不起作用,我不知道如何从一个组中建立这个帖子列表。

posts_controller.rb

  def create
    @post = @group.posts.build(post_params) #Find way to provide group id
    @post.user_id = current_user.id
    if @post.save
      flash[:success] = "Post created!"
      redirect_to root_url
    else
      redirect_to root_url
    end
  end

    def destroy
    end


  private

    def post_params
      params.require(:post).permit(:body, :user_id, :group_id)
    end

post.rb(与其他模特has_many:帖子)

belongs_to :group
belongs_to :user

组#show上的post_form

<%= form_for(@post) do |f| %>
  <%= render 'shared/error_messages', object: f.object %>
  <div class="field">
    <%= f.label :post %>
    <%= f.text_area :body, placeholder: "Compose new micropost..." %>
  </div>
  <%= f.submit "Create Post", class: "btn btn-large btn-primary" %>
<% end %>

groups_controller.rb

def show
    @group = Group.find(params[:id])
    @post = @group.posts.build
end

的routes.rb

  resources :groups do
    resources :follows, :only => [:create, :destroy]
  end
  resources :posts, :only => [:create, :destroy]

我的确认为:或者帖子需要嵌套在内:群组资源?这给出了一个“未定义的方法`posts_path'”。

1 个答案:

答案 0 :(得分:4)

你可以在这样的群组中嵌套帖子:

resources :groups do
  ...
  resources :posts, only: [:create, :destroy]
end

运行'rake routes'以查看您的路线的命名方式。您的form_for必须包含对组的引用,即

form_for [@group, @post] do
  ...
end

组别ID将在params散列中以params [:group_id]

的形式提供

另请查看http://guides.rubyonrails.org/routing.html