Rails Resources доставляет мне головную боль - PullRequest
1 голос
/ 30 ноября 2010

Я разработчик .NET и перехожу на Ruby on Rails.Я программировал в ASP.NET MVC и сейчас пытаюсь применить те же концепции к Rails.Я создал действие index и теперь, когда я говорю home / index, он автоматически перенаправляет меня на действие show, которого не существует.В моем файле rout.rb есть такая строка:

resources: home

home - это home_controller.

Что я делаю не так?

class HomeController < ApplicationController

  def show

  end

  # show all the articles 
  def index

    @articles = Array.new[Article.new,Article.new,Article.new]

    respond_to do |format|
      format.html 
      format.xml { render :xml => @articles }
    end

  end

  def new 
    @article = Article.new

    respond_to do |format|

      format.html 
      format.xml { render :xml => @article }

    end

  end



  def create

    @article = Article.new(params[:post]);

    if @article.save 

      format.html { redirect_to(@post,
              :notice => 'Post was successfully created.') }

    end


  end

  def confirm 
  end

end

1 Ответ

3 голосов
/ 01 декабря 2010

Вы можете запустить "маршруты рейка", чтобы проверить, что rails думает о ваших маршрутах и ​​какие URL будут отправлены на какие контроллеры.

В вашем случае я получаю:

home_index GET    /home(.:format)           {:action=>"index", :controller=>"home"}
home_index POST   /home(.:format)           {:action=>"create", :controller=>"home"}
  new_home GET    /home/new(.:format)       {:action=>"new", :controller=>"home"}
 edit_home GET    /home/:id/edit(.:format)  {:action=>"edit", :controller=>"home"}
      home GET    /home/:id(.:format)       {:action=>"show", :controller=>"home"}
      home PUT    /home/:id(.:format)       {:action=>"update", :controller=>"home"}
      home DELETE /home/:id(.:format)       {:action=>"destroy", :controller=>"home"}

Итак, чтобы перейти к действию index, вам нужно перейти в "/ home". Если вы перейдете в «/ home / index», он будет думать, что «index» - это идентификатор ресурса, отправляя его в действие show.

Однако в Rails принято использовать множественные имена для контроллеров и присваивать им имена после ресурса, который они представляют (обычно это модель, но это не обязательно). Поэтому в вашем случае имя контроллера должно быть «ArticlesController», а ваш route.rb должен содержать «resources: article». Rails очень анально относится к множественному числу и именам в единственном числе.

Большим преимуществом использования множественного имени ресурса, к которому вы обращаетесь, является то, что теперь вы можете использовать короткие обозначения, такие как «redirect_to @article», «form_for @article do | f |» и т. Д.

Итак, ресурсы в Rails должны рассказывать о том, что вы хотите получить. Это также помогает в обслуживании, так как другие разработчики должны угадывать меньше. Если вам понадобится более одного ArticlesController, рассмотрите возможность использования пространств имен или попытайтесь выяснить, действительно ли один из этих контроллеров является другим ресурсом (даже если они хранят свои данные в той же таблице базы данных).

Дополнительную информацию о маршрутизаторах можно найти в Руководстве по Rails: http://guides.rubyonrails.org/routing.html

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