2011-04-29 81 views
1

我正在构建一个Kid's Chore应用程序。在application.html.erb我显示侧边栏列出孩子的名字:Rails link_to问题

<div id="side"> 
    <%= link_to "Home", home_path %><br /> 
    <% @children.each do |child| %> 
     <%= link_to child.name, child_path(child.id) %><br /> 
    <% end %> 
    </div> 

一旦点击一个孩子的名字,我要显示所有的家务..上面的代码将“秀”孩子单击时。

我想是这样的:

 <%= link_to child.name, chore_path %><br /> 

..这不起作用,因为:

  1. 我则失去了child_id ......我需要为他们记录他们的家务事
  2. 我被路由到http://localhost:3000/chores/1(我只想要差事指数)

我该如何保持在这个例子中,child_id是一个变量,但显示杂项索引?

干杯,克里斯

协会如下:

class Child < ActiveRecord::Base 
    has_many :completion, :dependent => :destroy 
    has_many :chores, :through => :completion 

class Chore < ActiveRecord::Base 
    has_many :completions 
    has_many :kids, :through => :completions 

class Completion < ActiveRecord::Base 
    belongs_to :child 
    belongs_to :chore 
+0

个别孩子是否有自己想要展示的一套家务?还是你希望每个孩子能够从主列表中选择他们完成的任务? – 2011-04-29 01:26:50

+0

它几乎听起来像你想在你的孩子#show视图中渲染杂项#索引。这是正确的吗? – 2011-04-29 01:40:30

+0

由于这个问题主要围绕'Child','Chore'和'Competion'模型之间的关系,您应该发布该代码。 – 2011-04-29 02:07:58

回答

0
link_to child.name, chores_path(:child_id => child.id) 

然后你就可以抢在动作子ID与params[:child_id]

的链接将是/chores?child_id=1例如。

+0

这似乎是一个......但看到我上面提供的协会。杂项模型中没有child_id字段。 – chris 2011-04-29 02:13:30

+0

@chris它不一定是。这会使'child_id'成为你可以从'chores_controller'中看到的查询字符串参数。 – 2011-04-29 03:27:16

+0

宾果..谢谢。我假设,当他们“提交”完成的杂事时,我会做params [:child_id]? – chris 2011-04-29 13:06:24

0

我一般创建这种情况下的子路径。

的routes.rb

resources :children do 
    resources :chores 
end 

chores_controller.rb

def index 
    @child = Child.includes(:chores).find_by_id(params[:child_id]) 
    @chores = @child ? @child.chores : Chores.all 
end 

现在你可以写你的链接为:

link_to child.name, child_chores_path(child) 

More on nested resources

+0

我没有在杂项模型中的child_id字段,所以这不会工作。我只需要杂项索引(列表),然后孩子可以单击“完成”,并将在ChoresController#Index 中的Completion Model.ActiveRecord :: RecordNotFound中记录杂项。未找到没有ID的孩子 Rails.root :/ Users/chris/rails_projects/kids_chores Application Trace |框架跟踪|充分跟踪 应用程序/控制器/ application_controller.rb:12:在'current_child ' 应用程序/控制器/ application_controller.rb:18:在'set_current_child' 请求 参数: { “child_id”=> “1”} – chris 2011-04-29 01:04:48

+0

最只需要...我只需要link_to重定向到家务索引并保存child_id 孩子然后将点击他/她完成的杂务,并且chore_id和child_id将被存储在完成模型中。 – chris 2011-04-29 01:58:01

+0

@chris如果您需要child_id来保存杂事,那么儿童和杂事之间就存在语义关系。您应该关联模型,而不是手动连接字段。从长远来看,它将为您节省大量时间。 – 2011-04-29 01:59:09

0

由于看起来您只是想要在Children#show视图中呈现杂项的主列表,因此您可以在适当的位置在您的children/show.html.erb中尝试渲染'chores/index'。只要确保在ChildrenController#show方法中设置了一个主变量@chores变量。不知道这是否是一个完整的解决方案,但有我的贡献。