2010-10-14 5 views
1

Я использую простой элемент ajax для частичного просмотра в представлении, чтобы пользователь мог переключать сообщение как прочитанное или непрочитанное. Когда я переключаюсь, я получаю сбой.Форма AJAX не проходит через params [: id]

MessageController # show не удалось найти MessageCopy без ID.
Применение трассировки: messages_controller.rb: 21 в «шоу» (первая линия действия)

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

+0

Привет, Джереми: match 'messages/read_unread_toggle' и матч 'messages/show'. – sscirrus

ответ

0

Во-первых, я хотел бы предложить, используя сгенерированный метод путь 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

извините, я отредактировал это несколько раз. Там может быть несколько ошибок. Сначала я попробую его с вашей схемой генерации URL до тех пор, пока он не будет работать, а затем используйте метод read_unread_toggle_message_path. Кроме того, вы должны стараться быть в соответствии с вашими интервалами и отступом, это сделает ваш код более читаемым. Удачи. –

Смежные вопросы