2014-01-21 100 views
0

我有服務和服務預訂模型,我想通過檢查servicebooking模型中的owner_id屬性來查看當前用戶提出的服務預訂。如何使用if語句來過濾來自模型對象的記錄ror

我servicebooking控制器的方法:

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 

我servicebookings查看:

<% 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」爲零:NilClass

任何想法如何更改此代碼以使其工作?在此先感謝你們。

回答

1

您應該切換循環的位置,如果在你的view語句,然後使用循環變量servicebooking不是實例變量@servicebooking,使它看起來像這樣

<% @servicebookings.each do |servicebooking| %> 
    <% if current_user.id == servicebooking.owner_id %> 
    the rest of the view ... 

UPDATE:如果您想在控制器級別更新,那麼它的幾乎是相同的:

@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 } 
+0

嘿艾哈邁德感謝您的回答,我已經if語句到遷此myservicebookings控制器方法和我得到了同樣的錯誤:未定義的方法'owner_id'爲零:NilClass - if語句工作在視圖中根據您的指示,但是返回了包括與所有者ID匹配的所有服務簿,所以我想在控制器級別進行過濾,請參閱我編輯的問題,並讓我知道您是否有提示?在此先感謝 – Joshua

+0

我無法看到您的問題中的更新,請您再次檢查併發布更新的控制器的片段? –

+0

我的歉意請看更新的答案 – Joshua

1
在你的情況下

,你不需要,如果statment因爲在這個變量你把所有的當前用戶本身rvicebooking:

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 %> 
+0

+1對於使用.any? - >如果accessible_attributes.any? - >如果我有任何可訪問的屬性。 ruby​​> [false,false,false,nil,nil] .any? => false – Rubyist

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 %> 
+0

這個邏輯看起來不錯,但我不認爲它會檢查用戶是否擁有服務預訂本身 – Joshua

相關問題