2010-05-17 37 views
0

我對下面的代碼做了什麼錯誤處於絕對的損失。我試圖在我的應用程序中實現一個消息傳遞系統,但希望它處理不同類型的消息。在這種情況下,我想創建':message_type => 1'的「請求」消息。Ruby on Rails:在控制器中使用方法名稱'request'失敗

不像我通常使用的那樣使用表單,我想在鏈接被點擊的時候創建這個實例。這裏是我有它設置在展會ERB文件的「用戶」:

<%=link_to "Send friend request", :action=>"request", :controller => "messages", :id => @user.id %> 

,並在控制器:

def request 
    @message = Message.new(:sender_id => current_user.id,:user_id => params[:id],:message_type => 1) 
    if @message.save 
     flash[:notice] = 'Message was successfully created.' 
     redirect_to message_path(@message) 
     else 
     redirect_to message_path(@message) 
     end 
    end 

這將導致以下錯誤消息:未定義的方法`重寫「對零:NilClass與跟蹤看起來像

c:/ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/whiny_nil.rb:52:in `method_missing' 
    c:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_controller/base.rb:634:in `url_for' 
    (eval):16:in `message_path' 
    app/controllers/messages_controller.rb:11:in `request' 

我用map.resources:在routes.rb中文件的消息,並做了相應:Has_或許有幫助許多和:用戶和消息模型中的belongs_to關聯。

編輯:另外需要注意的是,保存是成功的,因爲一旦根地址被手動輸入到地址欄中,就會顯示「閃存」通知,表示保存已完成。使用開發控制檯確實存在,所以有一些與重定向混亂的東西。

回答

2

您可能想要重命名該操作,我確定request意味着控制器中的某些東西。

爲什麼不重命名行動從requestcreate,看看它是否有幫助。

因此,代碼將是:

在視圖

<%=link_to "Send friend request", :action=>"create", :controller => "messages", :id => @user.id %> 

在控制器

def create 
    @message = Message.new(:sender_id => current_user.id,:user_id => params[:id],:message_type => 1) 
    if @message.save 
     flash[:notice] = 'Message was successfully created.' 
     redirect_to message_path(@message) 
    else 
     redirect_to message_path(@message) 
    end 
    end 
+0

哇。謝謝。這是一個非常令人沮喪的考驗。我希望這些錯誤信息更具描述性。這很不吉利 – JackCA 2010-05-18 14:44:55

+0

這個「其他」塊仍然是一個等待發生的錯誤,正如我在答案中指出的那樣。我很高興你能解決你的直接問題。 – jdl 2010-05-18 16:15:25

+0

是的,我實際上只是將兩個重定向都改爲「redirect_to:back」,但謝謝! – JackCA 2010-05-18 17:28:15

0

更仔細地檢查您的日誌,您可能會發現您的保存失敗。不知道哪一行是#11,但我猜測它是在您的else區塊中,該區塊試圖爲@message對象創建一個路徑,其ID爲nil(尚未保存)。

+0

線11是redirect_to的if語句,而不是別的... – JackCA 2010-05-17 22:26:59

+0

將其更改爲message_path(:id => @ message.id) - 記錄標識以及失敗時發佈的內容。 – jdl 2010-05-17 22:39:23

+0

另外,如果您的「其他」條件達到了,它肯定會失敗。 – jdl 2010-05-17 22:39:51

相關問題