首页 > 解决方案 > 从静态导轨中获取价值 select_tag

问题描述

我刚刚开始使用 ruby​​ on rails 进行编程。我真的很喜欢它,但有时它真的很复杂。我想要做的是从 select_tag 中获取选定的值并将其传递给模型,我将在模型中将该值乘以另一个值(来自 from_for 文本字段)。问题是我无法弄清楚如何将值从视图获取到控制器,然后再到模型。

这是我的代码:

看法:

<%= label_tag 'Remind' %>
<%= f.number_field :remind %>
<%= select_tag :select_conv, options_for_select([['Day', 1], ['Week', 7], ['Month', 30]]) %>

控制器:

def create
  add = Item.new(item_params)

  if add.save
    flash[:notice] = ''
    redirect_to items_path
  else
    redirect_to new_item_path
    flash[:error] = ''
  end

private
def item_params
params.require(:item).permit(:itemname, :amount, :bbf, :remind)
end
end

模型:

def convert_to_d
  convert = self.remind * self.v_convertor
  self.assign_attributes(remind: convert)
end

先感谢您

标签: rubyweb

解决方案


你必须做一些改变:

看法:

<%= label_tag 'Remind' %>
<%= f.number_field :remind %>
<%= select_tag :select_conv, options_for_select([['Day', 1], ['Week', 7], ['Month', 30]]) %>

从视图中,它将返回一个包含每个用户输入值的哈希值。因此,对于此示例,它将返回:

params = { remind: user_input, select_conv: user_input }

您可以使用 item_params 方法在控制器中捕获它,但是您必须在方法中指定所需的参数,因此您的 item_params 应该是:

控制器:

def create
  add = Item.new(item_params)

  if add.save
    flash[:notice] = ''
    redirect_to items_path
  else
    redirect_to new_item_path
    flash[:error] = ''
  end
end

private 
def item_params 
  params.require(:item).permit(:itemname, :amount, :bbf, :remind, :select_conv) # << update here 
end     

在您的模型中,您可以使用它们的名称访问保存在 item_params 中的值,就像使用self.remind 一样,您可以使用self.select_conv调用它。

模型:

# self.select_conv can be used now.

def convert_to_d
  convert = self.remind * self.v_convertor
  self.assign_attributes(remind: convert)
end

您还可以在模型中使用一些验证来保证用户数据的完整性。有关验证的更多信息。


推荐阅读