我有一个群组模型,并希望用户能够发帖。每个帖子都属于该特定组以及创建它的用户(之后,每个帖子都会有评论)。我以为我会选择导轨教程微博部分并调整它以适合我的模型(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'”。
答案 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]
的形式提供