Rails在调用之前执行辅助方法

时间:2013-02-05 23:15:14

标签: ruby-on-rails variables helpermethods

我想要的@test变量在我想要之前得到评估。这就是我想要的:我有一个按钮(现在链接),旁边显示一个变量。最初加载页面时,该值应为“空白”。单击该按钮时,页面应刷新,变量应更改为其他内容,因为该按钮调用辅助方法。

这是我在home.html.erb中的内容:

<%= link_to 'Do stuff', my_helper_method(), :method => :get %>
<%= @test %>

这是我在my_proj_helper.rb(帮助方法)中的内容:

module MyProjHelper
    def my_helper_method()
       @test = "changed"
    end
end

在my_proj_controller.rb(控制器)中,我有这个:

class My_Proj_Controller < ApplicationController
    def home
        @test = "blank"
    end
end

我一定不能正确地做事。需要改变什么?

2 个答案:

答案 0 :(得分:1)

你不能使用这样的辅助方法。这是你可以做的:

在routes.rb

中创建路线
   get '/some_path/:test_variable' => 'my_proj_controller#test_action', as: :test_action

然后在控制器中创建相应的操作

   def test_action
     @test = params[:test_variable]
     render 'home'
   end

然后更改链接

    <%= link_to 'Link', test_action_path('change') %>

当用户点击该链接时,它会将页面中的GET请求发送到My_Proj_Controller,其中包含test_variable参数。 您的控制器会收到请求,设置@test变量,然后再显示home.html.erb页。

答案 1 :(得分:0)

我认为你在点击时试图点击辅助方法。这不是帮助器方法的用途 - 它们只是在视图或控制器中执行您需要的操作 - 例如render html。例如,'link_to'方法是一个帮助器。如果您希望@test变量根据需要更改 - 只需在控制器中有条件地设置值。

link_to方法的第二个参数应该是您要导航到的URL。如果它是一个方法,它应该返回一个字符串。在这种情况下,您调用一个返回字符串的方法。如果查看该标记的a href =“”,您将看到“已更改”为href属性。