繁体   English   中英

Ruby on Rails从下拉菜单中设置局部变量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM