如何从 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