在控制器中我尝试做以下事情:
class UsersController < Devise::RegistrationsController
def new
super
@test = "hello"
end
end
显然在new.html.erb
我有<%= @test %>
,但没有任何吸引力! hello字符串未显示。
如果我这样做
class UsersController < Devise::RegistrationsController
def new
@test = "hello"
super
end
end
然后显示字符串......那是怎么回事?为什么会这样?
答案 0 :(得分:0)
module Vehicular
def move_forward(n)
@position += n
end
end
class Vehicle
include Vehicular # Adds Vehicular to the lookup path
end
class Car < Vehicle
def move_forward(n)
puts "Vrooom!"
super # Calls Vehicular#move_forward
end
end
调用没有参数且没有空参数列表,super使用相同的参数调用相应的方法,并使用与调用当前方法相同的代码块。
修改: 在您的示例中,registrations_controller#new方法中有一个respond_with,这就是为什么@test =“hello”没有被执行。
答案 1 :(得分:0)
基于Devise源代码,应该将一个块传递给super()。这是一种快速而肮脏的解决方案。
class UsersController < Devise::RegistrationsController
def new
super do |resource|
@test = "hello"
end
end
end
答案 2 :(得分:0)
一种优雅的解决方案可能是创建一个before_action过滤器,仅用于:new方法。并设置@test实例变量。
class UsersController < Devise::RegistrationsController
before_action :set_test, only: [:new]
def new
super
end
private
def set_test
@test = "hello"
end
end