ruby - 从静态导轨中获取价值 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
先感谢您
解决方案
你必须做一些改变:
看法:
<%= 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
您还可以在模型中使用一些验证来保证用户数据的完整性。有关验证的更多信息。
推荐阅读
- jquery - 找到最近的隐藏元素并用 jQuery 显示它
- flutter - 颤振状态颜色变化
- javascript - 如何在 jQuery 的特定下拉列表中应用 .hide()?
- java - 通过父类创建新对象
- c++ - 从向量中获取大小
- java - 如果我想运行两个并行的 AsyncTask,我必须在两个调用上都使用 executeOnExecutor 吗?
- reactjs - React、console.log 和 render 显示不同的值
- database - Gorm 更改列长
- php - Mysql - php_network_getaddresses:getaddrinfo 失败:名称或服务未知
- python - PyTorch:PyTorch 中的 numpy.linalg.multi_dot() 等价物是什么