2011-10-29 12 views
0

パラメータを渡す際に問題があります。ショービューでiが "メッセージを送る"link_to(レール)を使用してパラメータを渡すことはできません

= LINK_TOを有する、{:コントローラ=> "ユーザー"、:アクション=> "SEND_MESSAGE":USER_ID => @ user.id}

と私users_controllerは方法

def send_message 
    @user = User.find(params[:user_id]) 
    @message=Message.new 
    redirect_to send_message_path 
end 

と私のショー方法

def show 
    @user = User.find(params[:id]) 
    @post=Post.new 
    @[email protected](:page => params[:page],:per_page => 10) 
    end 

があるが、私持っているとエラー私が間違っているの何SEND_MESSAGE方法

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

に、その行にリンク

IDせずにユーザーが見つかりませんでした

をクリックした後?私はこのことについて多くの例を読んで、それは事前に(

おかげで作業をdoesnt !!!何が起こる

+0

あなたのルートが使用しているとき、私は同じエラーを持っている – fl00r

答えて

1
=link_to "Send message", [:send_message, @user] 

とあなたのルートに::。それはあなたのルートを使用するように設定されていないので、それは作品

あなたが書く必要がありますあなたのルートで
resources :users do 
    post :send_message, :on => :collection 
end 
1

を変更しようとした場合:へUSER_ID:IDを、この

=link_to "Send message", {:controller => "users", :action => "send_message", :id => @user.id} 

def send_message 
    @user = User.find(params[:id]) 
    @message=Message.new 
    redirect_to send_message_path 
end 

の場合のように。USER_ID PARAMそれはそれはあなたのルートについての詳細を知るために役立つだろうしていない場合

+0

示し:/ユーザー/」=>「ユーザ#1 SEND_MESSAGE」 – Pavel

+0

に私が一致するように私のルートを変更したときに、それが働いたああ:ID
私のルートは、マッチ「/ SEND_MESSAGE」ですid/send_message '、:to =>' users#send_message '、:as =>' send_message '。私を助けてくれてありがとう! – Pavel

+1

あなたが既に持っているのと同じように動作させたいならば、 'match 'users /:id/send_message'、:to => 'users#send_message''へのルートを変更できるはずです。より洗練されたソリューションに変更したい場合は、fl00rの例を参照してください。 – nheinrich

0

resources :users do 
    post :send_message, :on => :member 
end 

そして、あなたのビューで以下のように記述します:

= link_to "Send Message", send_message_user_path(@user) 

これは、代わりにuser_ididを使用します。 コントローラではparams[:id]も使用する必要があります。

Imhoこれはメンバメソッドでありコレクションではないため、@ fl00rソリューションよりもクリーンです。

しかし、私はちょっとあなたがコントローラ内にその方法を持つ理由について混乱しています。 それだけでは、とにかくsend_message_pathにリダイレクトされるためです。設定したインスタンス変数はすべて失われます。だからではなく、あなたのビューでは、この書き込み:

= link_to 'Send message', send_message_path(:user_id => @user.id) 

をそして、これは(ユーザーを取得する必要があります)正しいコントローラ、すぐにあなたをお送りします。

また、showメソッドはいくつかの作業を使用できます。Userモデルにhas_many :postsを定義する必要があります。