плохо ли оставлять неиспользованные действия REST? - PullRequest
6 голосов
/ 27 февраля 2012

Я действительно запутался в том, как это сделать.

Я тоже устал и расстроен, и у меня болит мозг, когда я смотрю на такие разные вещи.

  1. Это плохая практика оставлять неиспользованные действия REST?Например, у меня есть модель ресурсов, и пользователи могут отправлять их, но мне не нужно действие index для их отображения, поскольку они обрабатываются контроллером индекса Home #.Все, что я хочу сделать, это использовать link_to, чтобы перейти на страницу с формой, чтобы добавить новый ресурс.Так что теперь все link_to, что я пытаюсь сделать, продолжают пытаться перейти к / resources, когда я делаю resources_path.Я читал, как вы можете использовать «устаревшие» методы и просто ссылаться на действие в контроллере, но это не «путь рельсов».Теперь я пытаюсь выяснить, каков путь рельсов, если я не использую все различные действия REST, которые он выполняет по умолчанию.

  2. звучит ли приведенный выше сценарий так, будто я делаю это правильно?что я хотел, чтобы это было в home # index для перечисления всех ресурсов, а не ресурсов # index?

  3. Если это плохая практика, то как мне создать их вручную?все учебники, которые я вижу в Интернете, "просто наберите resource :user, и вы хорошо! он не говорит, что делать, если вы не хотите / нуждаетесь во всех них

  4. что если я хочуизменить URL-адрес по умолчанию? Меня это особо не волнует, но все в IRC говорят мне, что это «неправильно». Как неправильно менять URL-адрес? Я хочу, чтобы он был / resource / submit, а не / resources / new.Единственное / множественное число, кажется, имеет больше смысла для меня и выглядит более профессионально.

  5. Учитывая, что я оставляю все URL-адреса одинаковыми. Если я перехожу к / resources / new и нажимаю 'отправить 'в форме, где написано:

Шаблон отсутствует

Missing template 
resources/create, application/create with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee]}. Searched in: * "/Users/Zesty/Code/gem-portal/app/views" * "/usr/local/lib/ruby/gems/1.9.1/gems/devise-2.0.4/app/views"

если у меня есть ресурсы: ресурсы в моих маршрутах, я понятия не имею, почему он не собирается автоматическиresources # create:

  def create
    @resource = Resource.new(params[:resource])
  end

Спасибо!

Кстати, вот что у меня на маршруте, на случай, если что-то явно не так

  root  :to => 'home#index'

  resources :resources
  # match '/resource/submit',    :to => 'resources#new'

  match '/learn',    :to => 'pages#learn'
  match '/contact',  :to => 'pages#contact'
  match '/requests', :to => 'pages#requests'

1 Ответ

12 голосов
/ 27 февраля 2012

1.Это плохая практика - оставлять неиспользованные действия REST?
Насколько я могу ответить, это не плохая практика.Если вам не нужно индексное действие для контроллера, у вас его нет, точка.Но вы должны исключить это действие из ваших маршрутов, например, resource :resources, :except => [:index].Это может пригодиться, когда вы спасаетесь от ошибок, потому что NoTemplateError - это не то же самое, что RoutingError (что означает, что вы можете пропустить спасение чего-то в работе).

Кроме того, это хороший маленький помощник для разработки.Когда вы случайно пишете ссылку на неиспользуемый индекс контроллера, на странице, содержащей ссылку, появляется ошибка, если вы исключили действие из своих маршрутов.Если вы этого не сделаете, вы увидите ошибку только после нажатия на ссылку, поскольку маршрут действителен (но не имеет функции / шаблона / чего бы то ни было).

2.Вышеприведенный сценарий звучит так, будто я делаю это правильно?что я хотел, чтобы это было в home # index для перечисления всех ресурсов, а не ресурсов # index?
Я не могу ответить на это без понимания вашей бизнес-логики / рабочего процесса приложения.Но если вам это не нужно, вы оставляете его.

Если это косметическая проблема (например, ресурс # index в основном необходим, но под другим URL), вы можете просто создать маршрут match "home", :to => "resources#index".Это исключит ваш пользовательский домашний контроллер, и вы можете использовать индексное действие для resources, которое будет доступно в /home и /resources.Но опять же, это может быть не лучшим вариантом для вашего рабочего процесса / логики, так что это всего лишь предложение.

3.Если это плохая практика, то как мне создать их вручную?
На странице Rails Guides *1024* есть отличная страница обо всех ваших потребностях в маршрутизации.Взгляните туда.

4.Что делать, если я хочу изменить URL-адрес по умолчанию?
Rails путь - это соглашение по конфигурации .Означает, что эти методы являются соглашением рельсов.Хорошо придерживаться этого соглашения, поэтому каждый раз, когда вы возвращаетесь к своему приложению, меняющему вещи, вы по крайней мере знаете, как оно работает из-за этого соглашения.Даже рельсовые кодеры без каких-либо знаний о вашем приложении могут вносить изменения в него быстрее, когда все придерживаются этого соглашения. Этот забавный рекламный ролик RoR vs PHP объясняет это очень хорошо.

Вы можете изменить их, но не должны.

5,Учитывая, что я оставляю все URL-адреса одинаковыми.Если я захожу в / resources / new и нажимаю «отправить» в форме, где написано
После создания, вы обычно перенаправляете на что-то или визуализируете новое действие в вызове create, чтобы сохранить информацию о текущем объекте (например, ошибки), которые будут потеряны, когда вы будете делать перенаправление.В настоящее время вы находитесь в действии create (без рендеринга / перенаправления другого действия), поэтому rails ожидает шаблон create.html.erb.

Пример:

def create
  @resource = Resource.new(params[:resource])

  if @resource.save
    # record valid and saved, so redirecting to /resources/:id
    redirect_to @resource
  else
    # record not valid. rendering the new.html.erb template
    # (HINT the new action is NOT called here).
    render :action => :new
  end
end

Имейте в виду, что .new создаетновый объект, но он не сохраняется в базе данных, пока вы не вызовете, например, .save для него.


Это всего лишь мои мнения и опыт по этому вопросу, поэтому, если кто-то более опытный считает, что что-то не так, я рад прочитать комментарий и обновить свой ответ.

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