我希望选择选项菜单中的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
不幸的是,它没有按预期工作,有人可以让我知道我在这里想念的吗?
答案 0 :(得分:2)
根据the documentation,value_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")
%>