[英]Ruby on Rails set local variable from drop-down
我试图从下拉列表中获取值,将其设置为等于局部变量并显示它。 我发现的所有教程都使用Post方法将值存储在数据库中。
我是否可以将本地变量设置为等于用户在下拉列表中选择的变量?
这是一些示例代码,说明了我要执行的操作,我只是不知道如何将选定的下拉值设置为等于可变年龄...
<% year = 2017 %>
<p>What is your age?</p>
<%= select_tag "my_age", raw("<option>1</option><option>2</option><option>3</option>") %>
<% birth_year = year - age %>
<%= puts "You were born in #{birth_year}" %>
根据您写问题的方式,听起来您会想要一个使用一些JavaScript的解决方案。 Ruby在服务器上执行。 如果要让服务器知道用户选择了什么,则必须将数据发送到服务器。 这就是为什么其他教程已将POST
数据读取到服务器的原因。
这是您可以使用一些JavaScript来实现的方法:
const year = 2017
const my_age = document.getElementById("my_age")
my_age.addEventListener("change", (evt) => {
const age = evt.target.value
const birth_year = year - age
console.log("You were born in " + birth_year)
})
由于您在谈论局部变量,因此只能在一个实例调用中使用。 这样说意味着您想要使用的变量在调用视图之前被渲染了一次。
您所指的下拉列表是应该通过表单提交传递的表单元素。 因此,每次您要更改birth_year
时,它都应重新加载。 如果您在这种情况下使用GET或POST,则没有明显不同的方法。
在视图中:
<%= form_tag("/myaction", method: "get") do %>
<p>What is your age?</p>
<%= select_tag "my_age", raw("<option>1</option><option>2</option>
<option>3</option>") %>
<%= puts "You were born in #{@birth_year}" %>
<% end %>
在控制器中:
def myaction
year = Date.today.year
age = params[:my_age]
@birth_year = year - age
end
另一方面,如果您打算尽快在客户端页面(前端)中使用变量,则需要在Javascript或您使用的任何其他客户端框架中设置值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.