2014-09-27 2 views
0

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

ActiveRecord :: RecordNotFound (Не удалось найти пользователя без идентификатора): приложение/контроллеры/messages_controller.rb: 18: в `нового»

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

Я пытаюсь включить родословную камень в моей messages_controller, в частности, когда я пытаюсь ответить на сообщение, которое было получено в userbox (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 %> 

Started GET "/ сообщения/новый parent_id = 19?" Для 127.0.0.1 на 2014-09-27 15:41 : 18 -0400 Обработка сообщениямиController # new как HTML Параметры: {"parent_id" => "19"} Message Load (0.1ms) SELECT "messages". * FROM "messages" WHERE "messages". "Id" знак равно LIMIT 1 [[ "ID", 19]] Завершено 404 не найдено в 11мс

ActiveRecord :: RecordNotFound (Не удалось найти пользователя без ID): приложение/контроллеры/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) Rendered/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 в пределах спасания/компоновки (13,8 мс)

+0

Я не понимаю, если params [: user_id] не передается контроллеру (params [: user_id] == nil), ошибка будет поднята. см. User.find (nil) –

+0

Если параметр user_id не передается, вы должны смотреть на представление, которое генерирует этот запрос. OTOH, если вы не уверены, прошел ли user_id или нет, посмотрите журналы. Вставка логов для нового запроса поможет. – brahmana

+0

Brahmana, добавил содержание, о котором вы упомянули. Поэтому я попытался выполнить эпизод № 262, посвященный рельсам, для родословной. Вот почему контроллер передает параметр parent_id. Моя цель здесь состоит в том, чтобы заставить действие ответа работать, и иметь возможность отображать все предки электронной почты. – 2014-09-27 23:05:40

ответ

0

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

+0

Спасибо за ответ, это определенно заставило меня идти по правильному пути. Но я столкнулся с той же проблемой, что и упоминалось выше, где ответ отправляется обратно пользователю, который его представляет. Любые идеи по этому поводу? – 2014-09-28 06:50:51

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