如何从 rails 中的参数获取会话变量(未定义方法 '*' 为 nil class
how to get session variable from params in rails (undefined method '*' for nil class
在第一个控制器中,我设置了会话变量:
def show
@item = Item.find(params[:id])
session[:item_id] = @item.id
session[:amount] = params[:amount]
end
我的观点是 form_tag
:
<%= form_tag checkout_transaction_path, method: :get do %>
<%= label_tag :amount %>
<%= text_field :amount, placeholder: "Total bid amount", autofocus: true %>
<%= submit_tag "submit" %>
<% end %>
通过此表单发送的参数如下所示:
Parameters: {"utf8"=>"✓", "amount"=>{"{:placeholder=>\"Total bid amount\", :autofocus=>true}"=>"1111"}, "commit"=>"Confirm offer", "id"=>"1"}
第二个控制器尝试将会话变量分配给实例变量。
def checkout
@item = session[:item]
@amount = session[:amount]
end
但是,只有 @item
有效。我尝试乘 @amount * 0.10
但出现此错误:undefined method '*' for nil:NilClass
导致该错误的原因是什么?提交参数说它正在提交,但也许我尝试检索它的方式有问题? session[:item_id]
完美通过。
你有问题:
Parameters: {"utf8"=>"✓", "amount"=>{"{:placeholder=>\"Total bid amount\", :autofocus=>true}"=>"1111"}, "commit"=>"Confirm offer", "id"=>"sam-lipp-abandonment"}
在您的参数中,您发送金额参数,但在金额中,您发送 HTML 形式 "amount"=>{"{:placeholder=>\"Total bid amount\", :autofocus=>true}"=>"1111"}
,但应该只发送您在金额形式中设置的值,并且您的金额参数应该看起来像像这个例子! "amount"=>"1"
所以这意味着您的表单无法正常工作!
请尝试将您的表格替换为这个表格,然后在控制器中,您将获得金额!
<%= form_for @new_item, url: checkout_transaction_path do |f| %>
<%= f.label :amount %>
<%= f.text_field :amount, placeholder: "Total bid amount", autofocus: true %>
<%= submit_tag "submit" %>
<% end %>
或 form_tag
的相同代码
<%= form_tag checkout_transaction_path do %>
<%= label_tag :amount %>
<%= text_field_tag :amount, placeholder: "Total bid amount", autofocus: true %>
<%= submit_tag "Submit Post" %>
<% end %>
您表单中的问题可能出在这里:
你写 text_field
而不是 text_field_tag
同样对于 form_for
表单,您需要在控制器的方法中添加您将在表单中使用的变量,例如,我正在使用变量 @new_item
从哪里来调用此表单,类似这样
def new
@new_item = Item.new
end
在第一个控制器中,我设置了会话变量:
def show
@item = Item.find(params[:id])
session[:item_id] = @item.id
session[:amount] = params[:amount]
end
我的观点是 form_tag
:
<%= form_tag checkout_transaction_path, method: :get do %>
<%= label_tag :amount %>
<%= text_field :amount, placeholder: "Total bid amount", autofocus: true %>
<%= submit_tag "submit" %>
<% end %>
通过此表单发送的参数如下所示:
Parameters: {"utf8"=>"✓", "amount"=>{"{:placeholder=>\"Total bid amount\", :autofocus=>true}"=>"1111"}, "commit"=>"Confirm offer", "id"=>"1"}
第二个控制器尝试将会话变量分配给实例变量。
def checkout
@item = session[:item]
@amount = session[:amount]
end
但是,只有 @item
有效。我尝试乘 @amount * 0.10
但出现此错误:undefined method '*' for nil:NilClass
导致该错误的原因是什么?提交参数说它正在提交,但也许我尝试检索它的方式有问题? session[:item_id]
完美通过。
你有问题:
Parameters: {"utf8"=>"✓", "amount"=>{"{:placeholder=>\"Total bid amount\", :autofocus=>true}"=>"1111"}, "commit"=>"Confirm offer", "id"=>"sam-lipp-abandonment"}
在您的参数中,您发送金额参数,但在金额中,您发送 HTML 形式 "amount"=>{"{:placeholder=>\"Total bid amount\", :autofocus=>true}"=>"1111"}
,但应该只发送您在金额形式中设置的值,并且您的金额参数应该看起来像像这个例子! "amount"=>"1"
所以这意味着您的表单无法正常工作! 请尝试将您的表格替换为这个表格,然后在控制器中,您将获得金额!
<%= form_for @new_item, url: checkout_transaction_path do |f| %>
<%= f.label :amount %>
<%= f.text_field :amount, placeholder: "Total bid amount", autofocus: true %>
<%= submit_tag "submit" %>
<% end %>
或 form_tag
的相同代码<%= form_tag checkout_transaction_path do %>
<%= label_tag :amount %>
<%= text_field_tag :amount, placeholder: "Total bid amount", autofocus: true %>
<%= submit_tag "Submit Post" %>
<% end %>
您表单中的问题可能出在这里:
你写 text_field
而不是 text_field_tag
同样对于 form_for
表单,您需要在控制器的方法中添加您将在表单中使用的变量,例如,我正在使用变量 @new_item
从哪里来调用此表单,类似这样
def new
@new_item = Item.new
end