Ruby on rails rails控制器操作中有多个实例变量?(Rails最佳实践)
比如说,我有两个模型,post和category。现在,假设我想这样做,那么从category show页面可以使用form_for方法创建一篇新文章。为此,您显然需要访问@category变量和一个新的post实例(@post)。控制器中的代码是否可接受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 或者,在一
#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是的,我可能应该详细说明我在这里做的是一个模式弹出窗口,并想知道这是否仍然是最好的方式