我有服务和服务预订模型,我想通过检查服务预订模型中的owner_id属性来查看当前用户的服务预订。
我的服务预订控制器方法:
def myservicebookings
if current_user.id == @servicebooking.owner_id
@servicebookings = current_user.servicebookings.search(params[:search]).order(sort_column + " " + sort_direction).paginate(:per_page => 5, :page => params[:page])
else
"You have no service bookings"
end
end
我的服务预订视图:
<% if current_user.id == @servicebooking.owner_id %><% @servicebookings.each do |servicebooking| %>
<tr>
<td><%= servicebooking.date %></td>
<td><%= servicebooking.time %></td>
<td><%= servicebooking.service_name %></td>
</tr>
<% end %>
<% else %>
<%= "You have no outgoing service bookings" %>
<% end %>
目前,在尝试加载myservicebookings表单时出现以下错误:
未定义的方法`owner_id'代表nil:NilClass
有关如何更改此代码以使其有效的任何想法?先谢谢你们。
答案 0 :(得分:1)
您应该在视图中切换循环和if语句的位置,然后使用循环变量servicebooking
而不是实例变量@servicebooking
,使其看起来像这样
<% @servicebookings.each do |servicebooking| %>
<% if current_user.id == servicebooking.owner_id %>
the rest of the view ...
更新:如果您想在控制器级别进行更新,那么它几乎相同:
@servicebookings = current_user.servicebookings.search(params[:search]).order(sort_column + " " + sort_direction).paginate(:per_page => 5, :page => params[:page])
@servicebookings.select! { |servicebooking| servicebooking.owner_id == current_user.id }
答案 1 :(得分:1)
在你的情况下,你不需要if语句,因为在这个变量中你有所有当前的用户服务预订:
def myservicebookings
@servicebookings = current_user.servicebookings.
^^^^^^^^^^^^ search(params[:search]).
order(sort_column + " " + sort_direction).
paginate(:per_page => 5, :page => params[:page])
end
使用它:
<% if @servicebookings.any? %>
<% @servicebookings.each do |servicebooking| %>
<tr>
<td><%= servicebooking.date %></td>
<td><%= servicebooking.time %></td>
<td><%= servicebooking.service_name %></td>
</tr>
<% end %>
<% else %>
<%= "You have no outgoing service bookings" %>
<% end %>
或者这个:
<% if @servicebookings.any? %>
<% for servicebooking in @servicebookings %>
<tr>
<td><%= servicebooking.date %></td>
<td><%= servicebooking.time %></td>
<td><%= servicebooking.service_name %></td>
</tr>
<% end if current_user.id == servicebooking.owner_id %>
<% else %>
<%= "You have no outgoing service bookings" %>
<% end %>
答案 2 :(得分:0)
我不会弄乱我的观点或我的控制器。我会在这里去OOPS。在RoR,它的瘦身控制器,胖子模型。
转到你的模特,
class ServiceBooking < ActiveRecord::Base
# u = User, srch = params[:search],p = params[:page],p_p = per_page,s_c =sort_columns, s_d = sort_direction
def self.mine(u,srch,s_c,s_d,p,p_p = 5)
u.servicebookings.search(srch).order(s_c + " " + s_d).paginate(per_page: p_p, page: => p)
end
end
在你的控制器中,
def myservicebookings
# 6th argument to this method is overridable.
@mine = ServiceBooking.mine(current_user,params[:search],sort_column,sort_direction,params[:page])
end
在您的视图中,
<% @mine.each do |m| %>
<tr>
<td><%= m.date %></td>
<td><%= m.time %></td>
<td><%= m.service_name %></td>
</tr>
<% end %>