如何在select选项标签中使value属性具有url的轨道

时间:2019-06-12 16:26:11

标签: ruby-on-rails ruby ruby-on-rails-5

我希望选择选项菜单中的value属性包含url,单击时应转到特定路径。我正在使用辅助方法来构建路径

代码:

<%= select_tag :account, options_from_collection_for_select(Account.all,build_path_for_airline(id),"name") %>

助手:

def build_path_for_airline(id)
      new_path = Rails.application.routes.recognize_path(request.path)
      new_path[:airline_id] = id
      new_path
    end

不幸的是,它没有按预期工作,有人可以让我知道我在这里想念的吗?

2 个答案:

答案 0 :(得分:2)

根据the documentationvalue_method参数就是一种方法。您不能使用任意代码块来期望它能正常工作。

您应该将build_path_for_airline实现为模型类中的辅助方法,并在options_from_collection_for_select调用中使用该方法。

# app/models/account.rb

class Account
  # ...
  def airline_path
    # Build the airline path for the current account
  end
end
# app/views/...

<%= select_tag :account, options_from_collection_for_select(Account.all, :airline_path, :name) %>

答案 1 :(得分:1)

理查德·迪根(Richard-Degenne)的答案是正确的,但是除了将方法放入模型之外,还有其他选择。 options_from_collection_for_select也可以为其value_method参数取一个lambda:

<%= select_tag :account, options_from_collection_for_select(
      Account.all,
      ->(account){ build_path_for_airline(account.id) },
      "name")
%>