无法访问变量
Can't Access Variables
我有一个请求模型,它存储一个人的性别、健康水平和可用性。该对象属于用户模型。我想要做的是将最初发出请求的人的用户 ID 传递给 ,并在用户单击按钮时将 :user 参数发送到邮件控制器上的操作 send_mail 。这不起作用,Rails 表示意外的关键字。我基本上是在尝试将请求对象的 user.id 传递给邮件控制器 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>
在您的情况下,您需要从参数哈希中提取用户:
def send_email
@creation_user = params[:user]
@email = @creation_user.email
end
更新:
你应该定义一个nested resource.
config/routes.rb
resources :requests, only: [:index, :new, :create] do
resources :mails, only: [:create]
end
现在更新您的视图以使用您的新路线。
app/views/requests/index.html.erb
<%= button_to "I want to work out with you!", request_mails_path(request) %>
更新您的控制器。
app/controllers/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
您可以通过将 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'
我有一个请求模型,它存储一个人的性别、健康水平和可用性。该对象属于用户模型。我想要做的是将最初发出请求的人的用户 ID 传递给 ,并在用户单击按钮时将 :user 参数发送到邮件控制器上的操作 send_mail 。这不起作用,Rails 表示意外的关键字。我基本上是在尝试将请求对象的 user.id 传递给邮件控制器 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>
在您的情况下,您需要从参数哈希中提取用户:
def send_email
@creation_user = params[:user]
@email = @creation_user.email
end
更新:
你应该定义一个nested resource.
config/routes.rb
resources :requests, only: [:index, :new, :create] do
resources :mails, only: [:create]
end
现在更新您的视图以使用您的新路线。
app/views/requests/index.html.erb
<%= button_to "I want to work out with you!", request_mails_path(request) %>
更新您的控制器。
app/controllers/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
您可以通过将 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'