2012-04-18 4 views
1

나는 Gumtree.com과 같은 웹 사이트에서 작업하고 있습니다. 사용자가 게시물을 작성하고 다양한 요구 사항을 강조 표시합니다 (예 : X 사진사가 필요함).레일즈 3 프로젝트에서 ID - 양식 오류가없는 사용자를 찾을 수 없습니다.

메시징 기능에 약간의 문제가 있습니다. Simple Private Messaging 플러그인을 사용하고 있습니다.

문제는 사용자가 메시지를 보내거나 게시물에 응답하는 형식으로되어 있습니다. 내가 액세스/메시지하려고 할 때/새로운 다음과 같은 오류가 발생합니다 : 아래 내 모델을 부착

ActiveRecord::RecordNotFound in MessagesController#new 
Couldn't find User without an ID 

- 어떤 조언에 감사!

감사합니다,

파이

메시지 CONTROLLER

class MessagesController < ApplicationController 

before_filter :set_user 

def index 
if params[:mailbox] == "sent" 
    @messages = @user.sent_messages 
else 
    @messages = @user.received_messages 
end 
end 

def show 
@message = Message.read_message(params[:id], current_user) 
end 

def new 
@message = Message.new 

if params[:reply_to] 
    @reply_to = @user.received_messages.find(params[:reply_to]) 
    unless @reply_to.nil? 
    @message.to = @reply_to.sender.login 
    @message.subject = "Re: #{@reply_to.subject}" 
    @message.body = "\n\n*Original message*\n\n #{@reply_to.body}" 
    end 
end 
end 

def create 
@message = Message.new(params[:message]) 
@message.sender = @user 
@message.recipient = User.find_by_login(params[:message][:to]) 

if @message.save 
    flash[:notice] = "Message sent" 
    redirect_to user_messages_path(@user) 
else 
    render :action => :new 
end 
end 

def delete_selected 
if request.post? 
    if params[:delete] 
    params[:delete].each { |id| 
     @message = Message.find(:first, :conditions => ["messages.id = ? AND (sender_id = ? OR recipient_id = ?)", id, @user, @user]) 
     @message.mark_deleted(@user) unless @message.nil? 
    } 
    flash[:notice] = "Messages deleted" 
    end 
    redirect_to :back 
end 
end 

private 
def set_user 
    @user = User.find(params[:user_id]) 
end 
end 

메시지의 모델

class Message < ActiveRecord::Base 

is_private_message 

attr_accessor :to 

end 

사용자 모델

class User < ActiveRecord::Base 

has_many :posts 
has_one :profile 
has_private_messages 

attr_accessible :email 

validates_presence_of :email 
validates_uniqueness_of :email, :message =>"Hmm, that email's already taken" 
validates_format_of :email, :with => /^([^\s]+)((?:[-a-z0-9]\.)[a-z]{2,})$/i, :message => "Hi! Please use a valid email" 


end 

MESSAGE> NEW VIEW

<% form_for @message, :url => user_messages_path(@user) do |f| %> 
<p> 
To:<br /> 
    <%= f.text_field :to %> 
    <%= error_message_on @message, :to %> 
</p> 
<p> 
Subject:<br /> 
<%= f.text_field :subject %> 
<%= error_message_on @message, :subject %> 
</p> 
<p> 
    Message<br /> 
    <%= f.text_area :body %> 
     <%= error_message_on @message, :body %> 
</p> 
<p> 
    <%= submit_tag "Send" %> 
</p> 
<% end %> 
+0

문제를 어떻게 수정했는지 기억하십니까? 동일한 플러그인을 사용하고 있으며 동일한 문제가 있습니다. 나는 @user를 User.first, User.find (1) 등등으로 설정하려고 시도했지만, 지금까지는 행운이 없다. – afaf12

답변

2

당신은 새 메시지 페이지가이 params을의에 :user_id를 수신 하시겠습니까? 사실이라 할지라도 누군가가 다른 사람으로 가장 할 수 있기 때문에 다른 사람 :user_id을 전달할 수 있기 때문에 이것이 당신의 의도라고 생각하지 않습니다.

@user = User.find(session[:user_id]) 

난 당신이 세션에 대해 들었어요 가정 :

그래서 하단에 라인 :이어야한다처럼

@user = User.find(params[:user_id]) # I think it's the cause of your error -- no :user_id is passed 

보인다.

+0

난 여전히 같은 오류가 발생합니다 – hikmatyar

+0

그냥 간단한 대체 못해 문제를 해결할 수 있습니다. 테스트 해보십시오 : 유효한 ID를이'find()'메소드에 전달하고 액션이 작동하는지 확인하십시오. 그렇다면'- user_id'를 먼저 전달하지 않았습니다. – jdoe

+0

오류 - 레일을 처음 사용합니다. 나는 테스트하는 법을 모른다. – hikmatyar

관련 문제