rails 3 - 调用相同的控制器/操作,但有两个不同的视图更改

时间:2012-01-09 08:49:16

标签: ruby-on-rails model-view-controller

简单的场景 - 我有两个按钮,它们都调用相同的控制器/动作。控制器动作设置随机数@random_number。

如果单击按钮1,我希望通过在RED中显示@random_number来更改视图(通过JS)。如果我单击按钮2,我希望通过在绿色中显示@random_number来更改视图(通过JS)。

干嘛最简单的方法是什么?我对rails的控制器/视图层的理解是每个控制器/动作都与相应的视图相关联。但在这种情况下,我想对两个按钮点击使用相同的业务逻辑(生成随机数),但结果视图取决于单击哪个按钮。

一个选项是将按钮id传递给控制器​​/动作,然后使用控制器/动作的相关RJS文件中的按钮id来执行适当的javascript。但我的直觉告诉我,这不是最好的方法。还有更好的方法吗?

非常感谢快速代码示例。

感谢。

2 个答案:

答案 0 :(得分:3)

您应该拥有相同的视图,并且相同的控制器方法会生成一个随机数。但是,在前端,您应该使用javascript或jquery来设置测试的颜色属性。要从这种方法开始,您可以查看ajaxSuccess并在jquery中单击事件绑定器。

如果您想避免使用javascript,另一种方法是在链接字段(HTML5)中设置数据值。应将数据值作为生成的请求的一部分发送到控制器。这应该只是在动态显示文本时设置。这样,您就不会在视图或控制器中重复代码的任何部分。

答案 1 :(得分:2)

如果仅显示红色或绿色的值,那么为什么不在前端处理它(如果它不是安全的东西,那么你可以避免使用服务器端模板)。如果你想在服务器上处理这个(为了使它安全),那么你可以为Button-1和Button-2调用两个不同的动作,并将产生随机数的代码移动到private function你可以从行动中呼唤。如果必须传递任何特定值以根据单击的特定按钮生成random number,则可以将值传递给private function并在那里处理。

至于代码示例,我会这样处理它。

def action_for_button_1
  @random_number = generate_random_number(args)
  # render template to show in green
end

def action_for_button_2
  @random_number = generate_random_number(args)
  #render template to show in red
end


private

def generate_random_number(args)
  # generate the random number and return it.
end