从静态rails select_tag中获取价值

时间:2018-05-04 18:29:56

标签: ruby web

我刚开始用rails上的ruby编程。我真的很喜欢它,但有时它真的很复杂。我想要做的是从select_tag获取选定的值并将其传递给Model,我将该值乘以另一个值(来自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

提前谢谢

1 个答案:

答案 0 :(得分:0)

你必须做一些改变:

查看:

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

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

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

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

的详细信息