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

时间:2015-04-02 02:53:51

标签: ruby-on-rails

比如说我有两个模型,帖子和类别。现在说我想这样做,所以从类别显示页面你可以使用form_for方法创建一个新的帖子。为此,您显然需要访问@category变量和帖子的新实例(@post)。这是控制器中可接受的代码吗?

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

或者在一个控制器动作中定义两个实例变量是不好的做法 - 如果是,那么这样的案例的最佳做法是什么?

2 个答案:

答案 0 :(得分:1)

我通常会这样做:

#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

然后,在您的观看中,只需引用postcategory(不是@post@_post)。好处是您可以从新的,删除等方法中删除相同的逻辑......

答案 1 :(得分:0)

与帖子相关的动作应尽可能在PostsController中。

让我们说用户正在查看类别" rails":/categories/rails

下的所有帖子

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

这将带您到PostsController#new实例化新帖子,验证类别参数并构建视图。此视图可以是新页面,也可以是弹出模式。