2015-11-13 261 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