Rails link_to问题

时间:2011-04-29 00:47:30

标签: ruby-on-rails routing link-to

我正在构建一个Kid's Chore App。在application.html.erb中,我显示了一个侧栏,列出了孩子们的名字:

  <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(我只想要家务指数)
  3. 如何在此示例中将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
    

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

然后,您可以使用params[:child_id]

抓取操作中的子ID

例如,该链接将指向/chores?child_id=1

答案 2 :(得分:0)

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