0

我拥有的@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

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

4

2 回答 2

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页面。

于 2013-02-05T23:25:12.110 回答
0

我认为您在单击时尝试使用辅助方法。这不是辅助方法的用途——它们只是在视图或控制器中做一些你需要的事情——比如渲染 html。例如,'link_to' 方法是一个助手。如果您希望 @test 变量根据需要更改 - 只需有条件地在控制器中设置值。

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

于 2013-02-05T23:22:56.030 回答