Ruby on rails rails控制器操作中有多个实例变量?(Rails最佳实践)

Ruby on rails rails控制器操作中有多个实例变量?(Rails最佳实践),ruby-on-rails,Ruby On Rails,比如说,我有两个模型,post和category。现在,假设我想这样做,那么从category show页面可以使用form_for方法创建一篇新文章。为此,您显然需要访问@category变量和一个新的post实例(@post)。控制器中的代码是否可接受 #app/controllers/categories_controller.rb def show @category = Category.find(params[:id]) @post = Post.new end 或者,在一

比如说,我有两个模型,post和category。现在,假设我想这样做,那么从category show页面可以使用form_for方法创建一篇新文章。为此,您显然需要访问@category变量和一个新的post实例(@post)。控制器中的代码是否可接受

#app/controllers/categories_controller.rb
def show
  @category = Category.find(params[:id])
  @post = Post.new
end

或者,在一个控制器操作中定义两个实例变量是一种不好的做法吗?如果是,对于这种情况,最佳做法是什么?

与POST相关的操作应尽可能位于PostsController中

假设用户正在查看“rails”类别下的所有帖子:
/categories/rails

该页面上有一个按钮,用于在“rails”类别下创建新帖子,href:
/posts/new?category=rails


这将带您进入
PostsController#new
,在这里实例化一篇新文章,验证category参数并构建一个视图。此视图可以是新页面,也可以是弹出的模式视图。

我通常会执行以下操作:

#app/controllers/categories_controller.rb

helper_method :category
helper_method :post

def show
end

private

def category
  @_category ||= params[:id] ? Category.find(params[:id]) : Category.new(params[:category])
end

def post
  @_post ||= Post.new(params[:post])
end

然后,在您的视图中,只需参考
post
category
(而不是
@post
@u post
)。很好的一点是,您可以从新的、删除的等方法中删除相同的逻辑…

Post
Category
有何关联?你也能证明一下吗?我不一定同意这一点。虽然这可能是一个“最佳实践”,但确实有一些时候你可能想像OP那样做,比如通过快速回复框回复论坛帖子。这取决于情况。@Jake0oo0是的,我可能应该详细说明我在这里做的是一个模式弹出窗口,并想知道这是否仍然是最好的方式