【问题标题】:rails 3.1 select_tag usagerails 3.1 select_tag 用法
【发布时间】:2012-06-26 12:16:13
【问题描述】:

我在页面顶部有一个 select_tag 字段,并尝试获取所选选项以根据用户选择更改页面上的内容。

我是一名学习者,已经找到了一些信息,但没有详细的示例和关于如何最好地实现和实施的良好解释。

场景如下: 我在项目和文档之间有一个 belongs_to 关联,在我的一个列出文档的视图中,我只想在 select 标记中显示属于当前选定项目的所有文档。

想到将所选项目的 ID 传递给文档索引操作,该操作仅通过 link_to 标记显示指定项目 ID 的文档。因此,这将在视图中使用正确的文档刷新页面,但我认为这不是正确的方法,并且我不能使用 link_to 标签作为 select_tag 中的选项。任何人都可以提供帮助并提供示例吗?

【问题讨论】:

  • 您知道可以选择的可用选项吗?如果是这样,而且只有少数,link_to's 会这样做。您还可以使用下拉菜单执行 select_tag。
  • 可用选项因用户创建的项目而异。基本上,用户可以创建项目,也可以创建属于项目的文档。我想使用 select_tag 的原因是因为当我查看文档时,我只想查看基于所选项目的文档。我有部分 select_tag,因为我需要它在各种视图中显示,因为我有属于特定项目的各种其他项目。

标签: ruby-on-rails ruby ruby-on-rails-3.1 ruby-on-rails-3.2


【解决方案1】:

我建议使用 form.select 方法和 options_for_select

f.select :attribute, options_for_select(@array, default_value)

在您的控制器中,您应该使用提交的参数创建或更新

n = record.new(:attribute => params[:attribute])

玩得开心

【讨论】:

  • 有没有办法在不使用表单的情况下实现这一点?
  • 是的,这也不是很常见。您可以在控制器中调用自定义操作,以创建带有前缀值的新记录,尽管我看不出不需要表单的意义?如果您不希望它可见,请使用隐藏字段:)
【解决方案2】:

在您的控制器中:

def index
  if params[:project]
    @documents = Document.where(:project => params[:project]
  else
    @projects = Project.all
  end
end

在您的表单/视图中:

<%= form_tag 'projects', :method => :get do %>
  <%= options_from_collection_for_select(@projects, :id, :name)
  <%= submit_tag %>
<% end %>

<% if @documents %>
  <%= @documents.each do |d| %>
    ....
  <% end >
<% end %>

【讨论】:

  • 我希望在不需要带有提交标签的表单的情况下离开,知道如何使用 select_tag 来实现吗?
  • options_from_collection_for_select 基本上是一个 select_tag。无论哪种情况,您都需要提交选择信息以获得所需的响应。除非您在 Javascript/Ajax 中执行某些操作,否则两者都不会自动更新您的页面。
  • 好的,谢谢。您能否向我展示一个示例,说明如何使用带有 select_tag 的 Javascript/Ajax 来实现这一点?
猜你喜欢
  • 2012-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-06
  • 1970-01-01
  • 1970-01-01
  • 2011-07-04
  • 1970-01-01
相关资源
最近更新 更多