Форма AJAX не проходит через params [: id] - PullRequest
1 голос
/ 15 октября 2010

Я использую простое частичное переключение ajax в представлении, чтобы позволить пользователю переключать сообщения как прочитанные, так и непрочитанные.Когда я переключаюсь, я получаю ошибку.

MessagesController # show не может найти MessageCopy без ID.
Трассировка приложения: messages_controller.rb: 21 в 'show' (первая строка действия)

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 = !@message.read
    @message.save(:validate => false)
    render :partial => "read_unread_buttons", :locals => {:message => @message, :id => params[:id] }, :layout => false
  end

1 Ответ

0 голосов
/ 15 октября 2010

Во-первых, я бы предложил использовать метод сгенерированного пути URL для генерации href, вы увидите это в примере ниже.

Во-вторых, я предполагаю, что ваш route.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-метода, который должна использовать ссылка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...