2011-04-28 191 views
0

我正在为我的孩子开发一个应用程序来记录他们的杂事。我有3个孩子(尼克,锡耶纳,苹果机),并有超链接的每个名称的主页...Rails协会/会议问题

我有以下关联:

Child: 
    has_many :completions 
    has_many :chores, :through=>:completion 

Completion: 
    belongs_to :child 
    belongs_to :chore 

Chore: 
    has_many :completions 
    has_many :kid, :through=>:completion 
  1. 我如何(在点击孩子的姓名)将child_id保存为会话对象,以将完成内容发布到完成模型?

  2. 当另一个孩子在主页上点击他们的名字时,我该如何清除/更改sesison给新孩子?

任何帮助,非常感谢。谢谢你,CB

+1

Rails路由如何与您的问题相关? :/ – Spyros 2011-04-28 02:13:52

+0

这里有问题吗?它看起来并不像它。 – 2011-04-28 03:22:46

+0

希望我清理了这个问题。我需要将child_id传递给下一个视图(杂项/索引)......以便在选择杂项并单击提交后,将child_id和chore_id传递给完成的模型。非常感谢。 – chris 2011-04-28 13:01:12

回答

0

如果我正确地理解了这个问题(至少如你的评论中所述),我最近做了类似的事情。见Building a nested attribute from multiple parent objects。基本上,我用polymorphic_url做一个链接,创建一个新的项目(我可能会使用@ child.chores.build(PARAMS)),并通过该属性:chore_id,即

link_to "Mark as complete", polymorphic_url([:new, @child, :completion], :chore_id => @chore.id) 

在你的控制器确保为您的ChoresController#新你有类似

def new 
    @chore = <current_child>.chores.build(params) 
end 

希望这有助于。

+0

我很感激。我想我在问一些更简单的事情......如何在点击孩子的名字时设置“当前孩子”? – chris 2011-04-28 18:14:14

+0

你是在说更多的全局变量吗?或者这将在某个模型的背景下进行? – 2011-04-28 18:19:46

1

所以,乔希超越了。作为一个noob,我对大多数人提出了更简单更基本的要求。答案很简单:

ApplicationController 

private 
    def current_child 
    child = Child.find(params[:id]) 
    session[:child_id] = child.id 
    end 
end 

这使我可以将该孩子的ID存储在会话中并发布到完成的模型中。

+0

感谢您的接受。您的解决方案将符合我下一个建议的要求。很高兴这是为你工作。 – 2011-04-28 18:44:22

+0

感谢你以及乔希。看起来你是一个很棒的帮助/这个很酷的社区的资源。 – chris 2011-04-28 23:05:36