【问题标题】:Rails: Records of two models in one collection_selectRails:一个集合中两个模型的记录_select
【发布时间】:2016-08-09 22:08:36
【问题描述】:

第 1 部分: 我想要的是在一个集合选择中获取两个表的记录。稍后,我想根据所选项目执行搜索。

到目前为止,我已经设法在一次选择中以这种方式获取记录:

控制器:

@result1 = Model1.all
@result2 = Model2.all
@all = @result2 | @result1

查看:

<%= collection_select :id,:id,@all, :id, :id,{prompt: "All Templates"} %>

这里的问题是我想从 Model1 中显示名称并从 Model2 中键入。

第 2 部分 如果用户选择 name,我想从 Model1 获取记录,如果选择了 type,我想从 Model2 获取记录。

我所能得到的只是一个集合选择中两个模型的id。我没主意了。让我知道是否需要更多详细信息。任何帮助表示赞赏。谢谢。

【问题讨论】:

    标签: ruby-on-rails-4 models collection-select


    【解决方案1】:

    您已经为 text_method 提供了 :id 给 collection_select。查看docs 了解此助手的工作原理。

    一种解决方案是在每个模型中创建一个“别名”方法,然后您可以在 collection_select 中调用它:

    model1.rb

    class Model1
      def text_value
        name
      end
    end
    

    model2.rb

    class Model2
      def text_value
        type
      end
    end
    

    出于演示目的,我将方法命名为 text_value。您可能需要为该属性指定一个不同的名称。

    顺便说一下,类型作为属性是为Single Table Inheritance 表保留的,因此最好使用不同的属性名称。

    在视图中

    <%= collection_select :id,:id, @all, :id, :text_value, {prompt: "All Templates"} %>
    

    【讨论】:

    • 这就像一个魅力男人。谢谢一吨。您能否也帮我弄清楚问题的第 2 部分。我好像迷路了。我只有一个集合选择,在其选择上出现记录。所以从我得到的,我必须使用 ajax 调用。因此,如果选择名称,则 url 应为 Model1,如果选择类型,则 url 应为 Model2。我将如何区分?
    • 您需要修改表单的发布位置,再次使用更通用的方法。如果您开始另一个问题并显示更多代码,包括带有表单代码的视图,那将是最好的。
    • 我会先尝试一下我认为对我有用的想法。如果我没有得到想要的结果,我肯定会带着另一个问题回到这里,并希望你能在那里提供帮助。谢谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多