Ruby on Rails关系下降下降依赖于First

时间:2011-09-29 05:13:06

标签: forms dependencies ruby-on-rails-3.1 selection formtastic

我有三种不同的模型可以参与其中。我正在尝试创建属于所有者的用户。业主有很多合作伙伴,合伙人有很多客户。这个问题以及它与此处提出的其他问题的不同之处在于,我不希望有人查看页面的源并查看整个客户列表。目前正处于开发/测试阶段。我最终会将owner_id硬编码为@ current_user的owner_id。此所有者用户只能看到自己的合作伙伴和合作伙伴的客户。我不希望他们看到另一个所有者的合作伙伴。

<%= f.input :owner_id, :as => :select, :collection => Owner.find(:all) %>
<%= f.input :partner_id, :as => :select, :collection => Partner.find(params[:owner_id]) %>
<%= f.input :client_id, :as => :select, :collection => Client.find(params[:partner_id]) %>

我上面的问题是find params生成错误,因为:owner_id没有值,也不会找到任何合作伙伴。那么,当选择合作伙伴时,如何让客户端选择填充客户列表。同样,如何在选择所有者后确定如何填充合作伙伴。请记住,一旦我弄清楚这一部分,所有者行将会改变。在找到这个问题之前,没有必要继续前进。

如果这是一个基于所选国家的城市,我找到了几个选项但尚未找到合适的选项。谢谢你们!

1 个答案:

答案 0 :(得分:1)

我认为您不了解(或利用)模型关联。由于我不完全了解您的模型或业务领域,我在这里做了很多手动...听起来您想要将选择框中的选项数量限制为当前用户应该选择的数量能够看到。

假设你有一个Tumblr风格的应用程序。你有很多用户,还有很多博客。当前登录的用户可以将新项目发布到他们有权访问的任何一个博客。在创建新帖子并选择要将其发布到哪个博客时,让我发布到您的博客或甚至知道它存在是不合适的。我们使用Blog.all

代替@current_user.blogs
<%= semantic_form_for @post do |f| %>
  <%= f.input :blog, :label => "Which blog?", :as => :select, :collection => @current_user.blogs %>
  ...
<% end %>

我会看到我的博客列表可供选择,你会看到你的。我认为这部分回答了你的问题。

问题的另一部分似乎是围绕动态根据表单中其他选择框中所做的选择更改选择框的内容。这是需要使用Javascript / AJAX处理的东西,以及Formtastic的一种超出范围和Stack Overflow的简单答案:)

我建议第一个版本保持尽可能简单。