0

好的,另一个烦人的问题。

我有一个 GuestController ,它的索引操作如下:

def index
  @booking = Booking.find(session[:booking_id]) #i have also hard coded values to make sure the session isn't the issue
  @guest = Guest.find(session[:guest_id])
end

和个人操作(执行更新)如下:

def personal
  @guest = Guest.find(session[:guest_id])
  if @guest.update(post_params)
    redirect_to :controller => 'guests', :action => 'cards'
  else
    render 'index'
  end
end

我的 index.html.erb 视图使用 @booking 变量:

<%= @booking.friendly_id %> #this is one example

并且还包含将“姓名”字段提交给个人操作的表单。如果数据有效,它会更新得很好,但如果它无效,@booking 变量不存在???

我需要显示验证错误,所以我不能只使用redirect_to。

我得到的错误是:Guests#personal 中的 NoMethodError未定义的方法 `friendly_id' for nil:NilClass

有任何想法吗?

4

3 回答 3

1

移动@booking@guest定义到 before_filter 怎么样?

before_filter do
  @booking = Booking.find(session[:booking_id]) #i have also hard coded values to make sure the session isn't the issue
  @guest = Guest.find(session[:guest_id])
end
于 2013-09-14T17:25:33.467 回答
1

只需在其他部分初始化对象

  else
    @booking = Booking.find(session[:booking_id])
    render 'index'
  end
于 2013-09-14T17:18:14.020 回答
0

什么时候需要处理一些事情@booking——nil如果我没看错的话,这可能会发生。

def index
  if Booking.find(session[:booking_id])?
    @booking = Booking.find(session[:booking_id])
  else
    @booking = Booking.build #or whatever you want here
  end 
  @guest = Guest.find(session[:guest_id])
end
于 2013-09-14T17:27:41.717 回答