【问题标题】:Ruby On Rails Helpers -- Using instance variables in helpersRuby On Rails 助手——在助手中使用实例变量
【发布时间】:2011-07-13 13:45:10
【问题描述】:

我有一个控制器助手:

module CourseStepsHelper
  def current_quiz_result
    @course_step.step.step_quiz.quiz_attempts.where(:patient_id => current_user.id, :step_quiz_id => @course_step.step.step_quiz.id).first
  end
end

它可以访问在 CourseSteps 控制器显示“动作”中定义的@course_step。这是在帮助程序中使用实例变量的常见做法吗?

【问题讨论】:

标签: ruby-on-rails ruby-on-rails-3


【解决方案1】:

我没有看到针对这两种情况提出的好的论据,并且在我寻找答案时偶然发现了这个问题。就个人而言,我一直在可能的帮助方法中使用实例变量,因为这是帮助方法和视图中最干的方法。我可以直接在助手中使用它,而不是从我的视图中传递实例变量并定义我的辅助方法来接受它。反正打字少了点……

【讨论】:

  • ... 通过使用实例变量。您的助手可以访问与您的视图相同的实例变量。
【解决方案2】:

根据此测验结果的详细程度,您实际上可能希望使用部分结果。在这种情况下,语法是:

<%= render :partial => 'quiz/results', :locals => { :quiz => @quiz } %>

如果它相对简单并且你认为它应该在一个助手中,你应该简单地将quiz 设为一个参数。要求视图提供特定的实例变量以使用您的帮助器可能会被其他开发人员所反对。

def quiz_result(quiz)    # no need to call it "current" when we supply quiz
    # do some stuff
end

在我看来,您可能还想以某种方式重组您的模型。如您所见,我使用 Quiz 类实现了我的示例。我不确定您的数据模型是什么样的,但是当您调用嵌套那么深的属性时,通常表明有问题。

【讨论】:

  • 好的,但这并不能真正回答原始问题。在我看来,问题是“使用/假设实例变量与作为参数传递”。例如,假设 @course_step 变量存在,助手是否按原样调用?或者你应该像这样调用助手:current_quiz_result(@course_step),并且函数应该接受单个参数吗?
  • 实际答案请查看stackoverflow.com/questions/6474596/… 谢谢@ybakos!
猜你喜欢
  • 2011-01-08
  • 2015-03-03
  • 1970-01-01
  • 1970-01-01
  • 2011-10-05
  • 2022-01-18
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
相关资源
最近更新 更多