2010-10-14 52 views
1

我在視圖中使用簡單的ajax切換部分,以允許用戶將消息切換爲已讀或未讀。當我切換時,我得到一個失敗。AJAX窗體不通過params [:id]

MessagesController#show無法找到沒有ID的MessageCopy。
應用跟蹤:messages_controller.rb:在「顯示」(行動的第一線)

show.html.erb 
    <%= render :partial => "read_unread_buttons" %> 

# read_unread_buttons partial 
    <div id="read_buttons" class="ajaxButtonText"> 
    <% if @message.read == true %> 
    <%= link_to "Mark Unread", 
    {:url => {:action => "read_unread_toggle", :id => @message.id}, 
    :update => {:success => "read_buttons", :failure => "Error"}}, 
    {:class=>"messageButton", :id => "markUnread"}, :remote => true %> 
    <% else %> 
    <%= link_to "Mark as Read", 
    {:url => {:action => "read_unread_toggle", :id => @message.id}, 
    :update => {:success => "read_buttons", :failure => "Error"}}, 
    {:class=>"messageButton", :id=>"markUnread"}, :remote => true %>  
    <% end %> 
    </div> 

# messages controller 
    def show 
    @message = current_user.received_messages.find(params[:id]) 
    @message.read = true 
    @message.save(:validate => false) 
    render :layout => "messages" 
    end 

    def read_unread_toggle 
    @message = current_user.received_messages.find(params[:id]) 
    @message.read = [email protected] 
    @message.save(:validate => false) 
    render :partial => "read_unread_buttons", :locals => {:message => @message, :id => params[:id] }, :layout => false 
    end 
+0

您的ajax鏈接不應該發送請求到「read_unread_toggle」動作,而不是show動作?你能爲消息控制器顯示你的路由嗎? – Jeremy 2010-10-14 21:17:07

+0

嗨傑里米:匹配'messages/read_unread_toggle'和 匹配'messages/show'。 – sscirrus 2010-10-14 21:48:50

回答

0

首先21,我建議使用生成的路徑URL方法生成的HREF,你會看到這在下面的例子中。

其次,我認爲你的routes.rb看起來是這樣的:

resources :messages do 
    member do 
    put 'read_unread_toggle' 
    end 
end 

然後你read_unread_buttons部分應該是這樣的

# read_unread_buttons partial 
    <div id="read_buttons" class="ajaxButtonText"> 
    <% if @message.read == true %> 
    <%= link_to "Mark Unread", read_unread_toggle_message_path(@message), 
    { :update => { :success => "read_buttons", :failure => "Error" } }, 
    { :class => "messageButton", :id => "markUnread" }, { :method => :put, :remote => true } %> 
    <% else %> 
    <%= link_to "Mark as Read", read_unread_toggle_message_path(@message), 
    { :update => { :success => "read_buttons", :failure => "Error" } }, 
    { :class => "messageButton", :id=>"markUnread" }, { :method => :put, :remote => true } %>  
    <% end %> 
    </div> 

具體來說,您忘了指定的方法的HTTP方法鏈接應該使用。

+0

對不起,我編輯了幾次。那裏可能會有一些錯誤。首先,我會嘗試與您的網址生成計劃,直到它的工作,然後使用read_unread_toggle_message_path方法。此外,您應該嘗試與您的間距和縮進保持一致,這會使您的代碼更具可讀性。祝你好運。 – 2010-10-14 21:57:46