Rails link_to вопрос - PullRequest
       12

Rails link_to вопрос

1 голос
/ 29 апреля 2011

Я создаю приложение для детей. В 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 (я просто хочу индекс работы по дому)

Как я могу сохранить 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 голосов
/ 29 апреля 2011
link_to child.name, chores_path(:child_id => child.id)

Затем вы можете получить идентификатор ребенка в действии с помощью params[:child_id]

Ссылка будет, например, на /chores?child_id=1.

0 голосов
/ 29 апреля 2011

Поскольку создается впечатление, что вы просто хотите отобразить основной список дел в представлении Children # show, возможно, вы можете попробовать выполнить рендеринг 'chores/index' в вашем children / show.html.erb в соответствующем месте.Просто убедитесь, что в вашем методе ChildrenController#show настроена основная переменная @chores.Не уверен, что это полное решение, но есть мой вклад.

0 голосов
/ 29 апреля 2011

Я обычно создаю суб-маршруты для этого сценария.

rout.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)

Подробнее о вложенных ресурсах

...