2015-11-13 263 views
1

我有一个页面在发送电子邮件,ID不通过

http://localhost:3000/email/correspond?id=6

这是发送电子邮件的形式。当发送其更改为:

http://localhost:3000/email/correspond

,并引发了错误; Couldn't find User with 'id'=这是由

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

这是email_controller引起的(见下文)

,因为ID在发送URL给我无法理解的问题。

有人可以解释一下吗?

从email_controller.rb

`

def correspond 
    @cuser = @current_user 
    @recipient = @user 
    @title = "Email" 
    if param_posted?(:message) 
    @message = Message.new(params[:message]) 
    if @message.valid? 
     PostMailer.say_hello(@cuser, @recipient, @message).deliver_now 
     flash[:notice] = "Email sent." 
     redirect_to user_path(@recipient) 
    end 
    end 
end 

def set_user 
    @user = User.find(params[:id]) 
end` 

的routes.rb

Eskvalleytales::Application.routes.draw do 
    root :to => 'users#index' 

    get 'user/:id' => 'user#show' 
    get 'user/search' => 'user#search' 
    resource :sessions 
    get 'session/destroy' => 'sessions#destroy' 
    get 'friendship/accept' => 'friendship#accept' 
    get 'friendship/decline' => 'friendship#decline' 
    get 'friendship/cancel' => 'friendship#cancel' 
    get 'friendship/delete' => 'friendship#delete' 
    get 'friendship/create' => 'friendship#create' 
    get 'email/correspond' => 'email#correspond' 
    post 'email/correspond' => 'email#correspond' 
    resources :comments 
    resources :users 
    resources :subcomments 
    resources :profiles 
    resources :emails 
    resources :users do 
    resources :comments do 
     resources :subcomments 
    end 
    end 
    resources :comments do 
    resources :subcomments 
    end 
    resources :users do 
    resources :emails 
    resources :new_file 
    end 

    resources :users do 
    resources :emails do 
    end 
    end 

    resources :users do 
    resources :fiendships 
    end 

    resources :users do 
    resources :subcomments 
    end 
end 

回答

0

首先,你并不需要在相同的动作重定向。如果您仍然需要简单检查set_user method中的ID。就像下面

def set_user 
    @user = User.find(params[:id]) if params[:id] 
end 
0

从你routes.rb,您有:

post 'email/correspond' => 'email#correspond' 

那就是当你发送的形式是什么负责,你有路线(URL):http://localhost:3000/email/correspond

然而,您有兴趣发送id以及params/:id),而不是query?id=:id),因为您正在寻找从电子邮件控制器中。

要做到这一点,你必须配置你的路线,沿着走给出id,如下:

post 'email/correspond/:id' => 'email#correspond' 

这样做将确保ID被作为参数,可以再当你打电话给你set_user

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

User.find(params[:id])查看请求的参数,并采取任何代替/:id的地方。

例子:

POST请求"http://localhost:3000/email/correspond/6"会给你params[:id] =>6

+0

感谢那些工作。我必须得到'email /对应/:id'=>'email#对应'以及 – gleb

+0

得到?嗯.....好吧。是的。当然。很高兴它的工作 –

+0

那么为什么要'user/id'=>'user#show'没有分号?这让我感到困惑。 – gleb