RAILS ...不能在视图上使用控制器变量

时间:2017-09-20 01:04:10

标签: ruby-on-rails variables dictionary collections controller

我想像往常一样在我的视图上使用这个控制器变量 但是

def new
 @lease_type = LeaseType.new
 @vehicle_types = VehicleType.all
 user_id = current_user.id
 @parking = Parking.where(owner: user_id).last
 @lease_times = LeaseTime.all
end

但是我的意见如果我使用它 enter image description here

enter image description here

所以我读了......并且说我必须拥有这样的东西。但我认为最好使用我从控制器发送的内容,而不是从视图中进行模型访问。

enter image description here

然后我想在这里使用de @ parking.id enter image description here

但是

enter image description here

SO!???为什么不能访问使用它?谢谢你的帮助

更新

创建方法

enter image description here

参数enter image description here

[![enter code here][8]][8]

2 个答案:

答案 0 :(得分:1)

出现错误的原因是您已在new操作中加载了该数据,但未在create操作中加载。当您尝试创建新的LeaseType时,如果有任何错误,它会再次呈现new操作,现在变量不具有您在new操作中获取的值。因此,您可以编写一个before_action,它将在newcreate上运行并为您加载数据:

在控制器上添加before_action

def load_data
  @vehicle_types = VehicleType.all
  @parking = Parking.where(owner: current_user.id).last
  @lease_times = LeaseTime.all
end

new操作更改为:

def new
  @lease_type = LeaseType.new
end

在控制器的顶部添加:

before_action :load_data, only: [:new, :create]

希望这有帮助。

答案 1 :(得分:0)

enter image description here

似乎很好但没有正常工作“nil”......使用你的load_date方法时

所以我把@collections放在new上并直接创建并运行。

类似这样的事情