Когда модель использует `: has_many` и вложенные маршруты, каков итоговый путь? - PullRequest
1 голос
/ 02 декабря 2011

Предисловие (потому что это мой первый пост на рельсах) Я люблю рельсы, но в настоящее время это сводит меня с ума! Я поиграл с рельсами 2.3 два года назад. Теперь я начал с рельсов 3.1. Все просто для удовольствия. Rails - лучший и самый профессиональный, которого я когда-либо видел в веб-разработке. Но ... Так как одна строка кода обладает такой мощью, ее довольно сложно изучить !!! Трудно получить магию рельсов: -)

Задача У меня есть вложенные модели и маршруты. На одной странице есть много статей. Я отображаю страницы / show.html.haml и на странице перечисляю все статьи. Каждая статья должна иметь нижнюю часть под надписями «new», «edit» и «destroy».

render @articles

Вот мои взгляды / статьи / _article.html.haml

%li.article_list{:id=>"a#{article.id}"}
    .article
        .article_head
            %h2
                =article.title:class => "icon"), '#'
        .clear
        .article_content
            = raw parse_content(article.content)
            -if admin?
                #article_menu
                    %ul
                        %li= link_to icon_new     + 'New...', new_page_article_path(@page)
                        %li=# link_to icon_edit    + 'Edit', edit_page_article_path(WHAT SHALL BE IN HERE???)
                        %li= link_to icon_destroy + 'Destroy', [article.page, article], :confirm => "#{article.title}\n\nAre you sure?", :method => :delete

Моя проблема в этой строке

%li=# link_to icon_edit    + 'Edit', edit_page_article_path(WHAT SHALL BE IN HERE???)

Я хочу отредактировать статью, но не понимаю, как это сделать! Я пробовал и гуглил часами!

В общем, я следовал этому хорошему руководству: http://guides.rubyonrails.org/getting_started.html#associating-models


Дополнительная информация

модель / article.rb

    class Article < ActiveRecord::Base
      attr_accessible :title, :content, :publish_at, :fan_only

      belongs_to :page

      validates :content, :presence => true
      validates :page_id, :presence => true

      default_scope :order => 'articles.created_at DESC'
    end

Модели / page.rb

   class Page < ActiveRecord::Base
      attr_accessible :short_name, :title, :content, :fan_only

      has_many :articles, :dependent => :destroy
    end

routes.rb

  resources :pages do
    resources :articles
  end

часть article_controller.rb

  # GET /articles/1/edit
  def edit
    @page = Page.find(params[:page_id])
    @article = @page.articles.find(params[:id])
  end

1 Ответ

7 голосов
/ 02 декабря 2011

rake routes должен показать вам все пути и дать подсказку о том, что там происходит.

Исходя из кода, который вы разместили, ответ на то, что там идет, должен бытьссылка на PageArticle, Page или Article - я не уверен, что это, потому что я не знаю, какие у вас модели.

С двумя моделями, Page и Article, и вложенные ресурсы, тогда у вас должен быть вложенный маршрут в файле routes.rb, который выглядит примерно так:

resources :pages do
  resources :articles
end

..., который устанавливает вложенный маршрут в /pages/:page_id/articles/:id/edit

... и выглядит как edit_page_article_path(@page, @article) в вашем приложении

Подробнее о маршрутизации + вложенные ресурсы: http://edgeguides.rubyonrails.org/routing.html#nested-resources

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...