我想要的@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
我一定不能正确地做事。需要改变什么?
答案 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属性。