2015-02-01 5 views
0

У меня есть модель запроса, в которой хранятся пол, уровень пригодности и доступность человека. Этот объект принадлежит модели пользователя. То, что я пытаюсь сделать, это передать идентификатор пользователя, который изначально сделал запрос, и отправил параметр user: в действие send_mail на почтовый контроллер, когда пользователь нажимает кнопку. Это не работает, и Rails говорит о неожиданном ключевом слове. Я в основном пытаюсь передать user.id объекта Request на действие send_email почтового контроллера. Здесь он будет использовать user_id, чтобы найти пользователя, а затем оттуда я найду электронное письмо пользователя. Затем я отправлю пользователю электронное письмо с этой переменной.Не удается получить доступ к переменным

Запрос Контроллер

class RequestsController < ApplicationController 
before_action :authenticate_user! 

def index 
    @requests = Request.all 
end 

def create 
    @request = Request.new(request_params) 
    @request.user = current_user 
    @request.save 
    redirect_to requests_path 
end 

def new 
    @request = Request.new 
end 

def destroy 
end 

private 
    def request_params 
     params.require(:request).permit(:gender, :level, :time_available) 
    end 
end 

index.html.erb

<% provide(:title, "Open Requests") %> 
<table class="table table-hover"> 
    <th>Gender</th> 
    <th>Level</th> 
    <th>Time Available: </th> 
    <% @requests.each do |request| %> 
    <tr> 
    <td><%= request.gender %></td> 
    <td><%= request.level %></td> 
    <td><%= request.time_available %></td> 
    <td><%= button_to "I want to exercise with you!", {:controller => "mail", :action => "send_email", :user => Request.user } class: "btn btn-primary" %></td> 
    </tr> 
<% end %> 
</table> 

Почта контроллер

class MailController < ApplicationController 
    def send_email 
     @creation_user = :user 
     @email = @creation_user.email 
    end 
end 

Send_Email.html.erb

<h2><%= @email %></h2> 
+0

попробуйте добавить пользователя в качестве параметра в метод send_email – erickeno

ответ

0

Просто вы можете попробовать Тхи пропусканием user функции

class MailController < ApplicationController 
    def send_email 
     @creation_user = params[:user] 
     @email = @creation_user.email 
    end 
end 

В маршрутах config/routes.rb

get "mail/send_mail", to: 'mail#send_mail' 
0

В вашем случае, вам нужно извлечь пользователя из Params хэша:

def send_email 
    @creation_user = params[:user] 
    @email = @creation_user.email 
end 

Update:

Вы должны определить nested resource.

конфигурации/routes.rb

resources :requests, only: [:index, :new, :create] do 
    resources :mails, only: [:create] 
end 

Теперь обновите ваш взгляд использовать свой новый маршрут.

приложение/просмотров/запросы/index.html.erb

<%= button_to "I want to work out with you!", request_mails_path(request) %> 

Update контроллер.

приложение/контроллеры/mails_controller.rb

def create 
    @email = user.email 
end 

private 

def user 
    find_request.user 
end 

def find_request 
    Request.find(params[:request_id]) 
end 

Переименуйте ваш взгляд send_email.html.erb на create.html.erb

+0

Теперь я получаю жалобу, в которой говорится, что никаких маршрутов не существует. Никакой маршрут не сопоставляется {: action => "send_email",: controller => "mail",: user => 4}. Какие-либо предложения? – ComicStix

+0

сделал это для вас? –

Смежные вопросы