Message_controller с драгоценным камнем предков

Приносим извинения за вопрос новичка, но я получаю следующую ошибку со ссылкой на сообщение # новое действие в моем контроллере сообщений:

ActiveRecord :: RecordNotFound (не удалось найти пользователя без идентификатора): app / controllers / messages_controller.rb: 18: в `новом '

@recipient = User.find(params[:user_id])

Я пытаюсь включить жемчужину предков в свой messages_controller, в частности, когда я пытаюсь ответить на сообщение, полученное в папке «Входящие» пользователя (index.html.erb). Я понимаю, что в настоящее время идентификатор не передается, но сталкивался ли кто-нибудь с подобной проблемой? Код ниже:

class MessagesController < ApplicationController

  def index
    @messages = current_user.to_messages
  end

  def outbox
    type = (params[:type] && params[:type] == "sent" ) ? "from_messages" : "to_messages"
    @messages = current_user.from_messages
  end

  def show
    @message = Message.find params[:id]
  end

  def new
    @message = Message.new(:parent_id => params[:parent_id])
    @recipient = User.find(params[:user_id])
  end

  def create
    @message = Message.new message_params
    @message.sender_id = current_user.id
    if @message.save
      flash[:success] = "Your message has been sent!"
      redirect_to users_path
    else
      flash[:failure] = "Please try again."
      redirect_to users_path
    end
  end

  def destroy
    @message = Message.find(params[:id])
    @message.destroy
    redirect_to messages_path
  end

  private

  def message_params
    params.require(:message).permit(:content, :sender_id, :recipient_id, :parent_id)
  end

end

show.html.erb (просмотреть)

From: <%= link_to @message.recipient.first_name + " " + @message.recipient.last_name, user_path(@message.recipient.id) %>,
To: <%= @message.sender.first_name + " " + @message.sender.last_name %>, 
Message: <%= @message.content %>

<% if @message.recipient_id == current_user.id %>
  <%= link_to "Reply", new_message_path(:parent_id => @message) %>
<% end %>

Начат GET "/ messages / new? Parent_id = 19" для 127.0.0.1 в 2014-09-27 15:41:18 -0400 Обработка MessagesController # new как параметры HTML: {"parent_id" => "19"} Загрузка сообщения (0,1 мс) ВЫБЕРИТЕ "сообщения". * ИЗ "сообщений" ГДЕ "сообщения". "Id" =? LIMIT 1 [["id", 19]] Выполнено 404, не найдено за 11 мс.

ActiveRecord :: RecordNotFound (не удалось найти пользователя без идентификатора): app / controllers / messages_controller.rb: 18: в `новом '

Обработано /Users/sikendersingh/.rvm/gems/ruby-2.1.2/gems/actionpack-4.1.4/lib/action_dispatch/middleware/templates/rescues/_source.erb (0,5 мс) Обработано /Users/sikendersingh/.rvm /gems/ruby-2.1.2/gems/actionpack-4.1.4/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (1.0ms) Обработано /Users/sikendersingh/.rvm/gems/ruby-2.1 .2 / gems / actionpack-4.1.4 / lib / action_dispatch / middleware / templates / rescues / _request_and_response.html.erb (1.1ms) Обработано /Users/sikendersingh/.rvm/gems/ruby-2.1.2/gems/actionpack -4.1.4 / lib / action_dispatch / middleware / templates / rescues / diagnostics.erb в rescues / layout (13,8 мс)


person Community    schedule 27.09.2014    source источник
comment
Я не понимаю, если params [: user_id] не был передан контроллеру (params [: user_id] == nil), то возникнет ошибка. см. User.find (ноль)   -  person Shalev Shalit    schedule 27.09.2014
comment
Если параметр user_id не передается, вы должны смотреть на представление, которое генерирует этот запрос. OTOH, если вы не уверены, передается user_id или нет, посмотрите логи. Поможет вставка журналов для нового запроса.   -  person brahmana    schedule 28.09.2014
comment
Брахман, добавил содержание, о котором вы упомянули. Так что я попытался следить за выпуском # 262 railscast, чтобы найти жемчужину предков. Вот почему контроллер передает параметр parent_id. Моя цель здесь - заставить действие ответа работать и иметь возможность отображать все предки электронных писем.   -  person    schedule 28.09.2014
comment
хорошо, поэтому я немного поигрался с этим. Прямо сейчас, когда «Пользователь А» отправляет «Пользователю Б» сообщение, «Пользователь А» становится отправителем и имеет sender_id = user_id. Пользователь B 'становится получателем и имеет recipient_id = user_id. Когда я нажимаю кнопку ответа, ответное сообщение отправляется не отправителю, а получателю, поэтому «Пользователь Б» отправляет ответ «Пользователю Б», а не «Пользователю А», что неверно. Может, в этом проблема?   -  person    schedule 28.09.2014


Ответы (1)


Я не уверен в проблеме получателя / отправителя, но я думаю, вам просто нужно передать user_id в качестве параметра из вашего представления. Таким образом, link_to станет: <%= link_to "Reply", new_message_path(:parent_id => @message, :user_id => @message.recipient_id) %>. Это сделает его доступным в новом действии.

person dchop1    schedule 28.09.2014
comment
Спасибо за ответ, это определенно привело меня на верный путь. Но я сталкиваюсь с той же проблемой, что упоминалась выше, когда ответ отправляется обратно пользователю, который его составляет. Есть идеи по этому поводу? - person ; 28.09.2014