如何在Rails中制作下拉菜单?

时间:2019-04-15 21:06:13

标签: ruby-on-rails drop-down-menu

在一个项目序列中,我在下拉菜单方面确实很艰难。 因此,我有两个模型

User.rb

class User < ApplicationRecord
  has_many :addresses

end

和Address.rb

class Address < ApplicationRecord
  belongs_to :user

end

然后,我进行了结帐过程的第一步,即用户输入其地址。有下拉菜单应如下所示:

选项1 :#{current_user.first_name} {current_user.last_name},{current_user.address}

如果用户单击下拉菜单中的此选项(默认),然后继续,则应从当前用户那里获取地址并继续。(此操作已授权)

选项2: 新地址

如果用户单击该选项,则会出现新的表单,用户可以在其中输入名字,姓氏和地址。

我尝试使用select和collection select标签,但似乎不是我所需要的。我知道我可以将onChange js方法用于表单,但是我不知道如何在选项1上插入地址作为表单的有效参数。

有什么建议吗?

更新

<%= form.fields_for :address do |form| %>
  <%= form.select_tag "bill address", options_for_select([[Address.where(:user_id => current_spree_user.id).collect{|b| "#{b.firstname} #{b.lastname}: #  {b.address1}, #{b.state}"}, current_user.id], ["New Adress",  ""]] %>
<% end %>

我尝试过此操作,但遇到错误找不到'id'= Nella Nienow的地址:801 Greenfelder Court,New York(我将此地址分配给控制台中的current_user)

1 个答案:

答案 0 :(得分:1)

我真的不知道选项2的意思,您必须更加具体。按照选项1,据我所知,您想做一个下拉菜单,其中每行都有相应用户的用户名,姓氏和地址。如果是这样,您可以执行以下操作:

<%= form_with model: @user do |user| %>
<%= user.select :id, list: User.all.collect{|b| ["#{b.username} #{b.lastname}: #{b.address}"]} %>
<% end %>

编辑: 我可以看到您确实发布了有关“动态下拉菜单”的文章,并且我认为我对使用Option 2所做的尝试有了更好的了解。因此,基本上,您应该检查终端上的路由并建立link_to ,它将链接到该路线。

在您的终端上输入rails路线,查看创建新用户并使用link_to的路线,例如:

<%= link_to "Link to new form", your_route %>

然后您可以执行User.new表单并将页面重定向到self。