我刚开始用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
提前谢谢
答案 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。
的详细信息