2012-04-18 15 views
1

私はGumtree.comのようなWebサイトで作業しています。ユーザーは投稿を作成し、さまざまなニーズを強調します(たとえば、X日に写真家が必要です)。Rails 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

関連する問題