需要帮助将数据从一个模型链接到另一个模型

问题描述:

我正在寻找一个清道夫狩猎应用程序,我被卡住了。所以我设立了狩猎和与狩猎相关的任务的CRUD。但我不知道如何设置它,以便用户可以将特定的任务与特定的搜索关联起来。我认为我已经正确地设置了模型,但我不确定如何设置允许这种任务与狩猎关联的视图。需要帮助将数据从一个模型链接到另一个模型

class Hunt < ActiveRecord::Base 

    has_many :tasks 
    attr_accessible :name 
    validates :name, :presence => true, 
        :length => { :maximum => 50 } , 
        :uniqueness => { :case_sensitive => false } 

end 


class Task < ActiveRecord::Base 

    belongs_to :hunts 
    attr_accessible :name 
    validates :name, :presence => true, 
        :length => { :maximum => 50 } , 
        :uniqueness => { :case_sensitive => false } 

end 

我猜我需要写一个视图,显示一个狩猎,然后列出所有可用的任务。然后我需要一种方法让用户“挑选”一项任务并将其添加到搜索中。这是最后一部分,让我难住。

一些有价值的信息来源是:

  1. Ruby on Rails Guides: ActionView Helpers - 提供了一个很好的出发点和概述

  2. Blog on dealing with Categories - 讨论使用从关联表导出范畴,并在视图呈现他们

  3. Rails Casts Nested Model - 这显示了如何处理嵌套或has_many关系。

现在就加入任务,并加入了追捕,与使用嵌套属性,你可以有一个显示任务,允许添加的狩猎景观的形式问题。添加操作可能需要一些Javascript(如RailsCasts中所演示的),或者在弹出窗口中执行一个hunt.tasks.build。关联上的构建将为创建的任务分配当前狩猎ID。

现在,如果您有一个预先分配给寻找的任务列表,您需要使表单显示属于寻线任务的选择列表。使用模型中定义的嵌套属性为:

class Hunt < ActiveRecord::Base 
    has_many :tasks 
    accepts_nested_attributes_for :tasks 
end 

class Task < ActiveRecord::Base 
    belongs_to :hunts 
end 

所以,现在的形式提交PARAMS将与嵌套,允许你做的的update_attributes相关任务ID发布。

更多详细信息在Rails API accepts nested attributes和RailsCast参考将提供一步一步的示例。

+0

感谢您的所有资源! – 2012-03-29 13:04:19

您的belongs_to声明在Task类应为:hunt而不是:hunts

就目前看来,这很简单。只需使用f.select(假设您的表单助手变量名称为f:hunt_id,并更新Task中的hunt_id属性。

这将关联HuntTask

一定要检查出options_for_select,因此您可以在窗体中显示Hunt名称和hunt_id选项值。我也推荐阅读关于关联的Rails指南:http://guides.rubyonrails.org/association_basics.html

我猜我需要写一个视图,显示一个狩猎,然后列出所有可用的任务。然后我需要一种方法让用户“挑选”一项任务并将其添加到搜索中。这是最后一部分,让我难住。

以上意味着有HuntTask而不是has_many之间的has_and_belongs_to_many*..*)的关系(因为寻线可以与多个任务相关联,并一个任务可以属于你的系统中的多个狩猎)。

你可以去:

class Hunt < ActiveRecord::Base 
    [...] 
    has_and_belongs_to_many :tasks 
    [...] 
end # Hunt 

class Task < ActiveRecord::Base 
    [...] 
    has_and_belongs_to_many :hunts 
    [...] 
end 

否则应使您可以将多个任务相关联(或者,如果你愿意,你可以只是一个关联),并且还具有一个任务属于一个以上的狩猎。此外,您可以使用简单的f.select表单标签助手来呈现系统中可用任务的列表。

希望这会有所帮助。