【发布时间】:2015-07-18 11:25:55
【问题描述】:
我正在尝试构建一个个人资料页面,该页面仅显示发送给请求用户的帖子,并允许访问者撰写他们自己的帖子。因为这个简化的示例应该有两个不同的控制器:用户和帖子,所以我为每个帖子操作制作了部分,以便在用户的显示操作中呈现。
我的视图目录的目录结构如下所示:
- posts
- _index.html.erb
- _new.html.erb
- users
- show.html.erb
... (etc.)
在用户的show.html.erb 中显示这些部分的部分:
<section>
<h3>Posts:</h3>
<%= render '/posts/new', :post => Post.new %>
<%= render '/posts/index', :posts => Post.where(target_id: params[:id]) %>
</section>
我最终发现,您可以将变量传递到 render 行中的部分,虽然这可行,但它非常混乱,可能没有遵循最佳实践。
理想情况下,我希望将这些部分与帖子控制器连接起来,这样我就可以在视图之外的地方编写更复杂的数据库查询:
class PostsController < ApplicationController
def new
@post = Post.new
end
def index
@posts = Post.where(target_id: params[:id])
end
def create
@post = Post.new(post_params)
@post.user_id = current_user.id
@post.target_id = params[:post][:target_id]
if @post.save
redirect_to :back, notice: 'You published a post!'
else
render new
end
end
private
def post_params
params.require(:post).permit(:body)
end
end
目前,我还没有找到这样做的方法。我知道这是一个新手问题,但提前感谢您的帮助。
【问题讨论】:
标签: ruby-on-rails