2017-10-18 64 views
0

我想將整個對象及其屬性返回給我的變量,但它似乎只返回電子郵件。在意見需要從find_by返回用戶對象作爲params,rails使用電子郵件

Userscontroller

.... 
def resend_act_create 
    @user = User.find_by(email: params[:user][:email]) 
    if @user 
    @user.send_activation_email 
    flash[:info] = "Please check your email to activate your account." 
    redirect_to root_url 
    else 
    flash[:warning] = "Could not find email in database" 
    render 'account_activations/new' 
    end 
end 
... 

服務器錯誤/ usermailer/account_activations.html.erb

ActionView::Template::Error (No route matches {:action=>"edit", :controller=>"account_activations", :email=>"[email protected]", :id=>nil} missing required keys: [:id]): 
6: Welcome to the Sample App! Click on the link below to activate your account: 
7: </p> 
8: 
9: <%= link_to "Activate", edit_account_activation_url(@user.activation_token, 
10:              email: @user.email) %> 

我不知道如何建立我的控制器動作,所以我可以包括路由的ID ?

編輯添加User.rb和路線

class User < ApplicationRecord 

.... 
def send_activation_email 
    UserMailer.account_activation(self).deliver_now 
end 
.... 

的routes.rb

.... 
resources :account_activations, only: [:edit] 

UserMailer.rb

def account_activation(user) 
    @user = user 
    mail to: user.email, subject: "Account activation" 
end 
+1

檢查你的'routes.rb','account_activations#edit'可能不存在。 –

+0

路線退出我有第一個帳戶激活電子郵件通過它這是一個重發。所以你說'find_by'應該像'find'方法那樣返回用戶對象? find_by在控制檯中正常工作。 –

+1

你的路線和用戶模型包含什麼? –

回答

2

在第9行中的文件views/usermailer/account_activations.html.erb

請添加id作爲參數:

<%= link_to "Activate", edit_account_activation_url(@user.activation_token, email: @user.email, id: @user.id) %> 

編輯:

爲什麼需要這個?

你需要它,因爲你用Rails的魔法:resources :account_activations, only: [:edit] 這條線爲您生成的路由。這些路線需要:id作爲參數。如果您轉至http://guides.rubyonrails.org/routing.html#controller-namespaces-and-routing 您可以查看生成的路線(例如,您也可以在終端中運行bin/rake routes以查看您的實際路線)。
您看到了,:edit路線需要參數:id
如果您自己編寫路線,而不使用:resources,則可以使用另一個參數而不是:id來標識記錄。

+0

是的,先生有電子郵件發送,我可以問爲什麼我需要這條線是因爲我「需要」包括它作爲find_by不包括它,就像例如'@user = User.new(user_params )'會創建和發送激活? –

+1

我爲您添加了更多信息。請將答案標記爲已接受;) –

+0

確定創建用戶時必須存在某個地方當我發送第一個帳戶激活電子郵件時,它不需要ID。參數作爲查詢字符串來完成,所以我會檢查這兩個參數。 –

相關問題