Form_for генерирует путь ресурса, заканчивающийся на «.1» - PullRequest
2 голосов
/ 29 сентября 2011

У меня есть ресурс под названием: school, и когда я вызываю form_for (@school), он генерирует действие формы:

/ school.1

Я новичок во всем этом, поэтому любойподсказки относительно того, почему это делает, было бы очень ценно.Лишенный сон и курс на крайний срок в 3 часа, обр!*

Ответы [ 2 ]

4 голосов
/ 29 сентября 2011

Используя метод единственного ресурса, вы сообщаете, что существует только один из этих объектов, в вашем файле маршрутов, я думаю, вам нужно изменить ваш ресурс: school на ...

resources :schools

Если, однако, вам нужна только одна школа, я думаю, вам нужно добавить опцию url в form_for ...

<% form_for(@school, :url => school_path) %>

Предлагаемое решение для последующих вопросов ...

Я думаю, что тебе нужно будет что-то вроде этого ...

# routes.rb
resources :users do
  resources :schools
end
resources :schools

# app/controllers/schools_controller.rb
class SchoolsController < ApplicationController
  def new
    @user = User.find(params[:user_id])
    @school = @user.build_school
  end

  def create
    @user = User.find(params[:user_id])
    @school = @user.build_school(params[:school])
    if @school.save
      # success...
    else
      # fail...
    end
  end

  def edit
    @school = School.find(params[:id])
  end

  def update
    @school = School.find(params[:id])
    if @school.update_attributes(params[:school])
      # success
    else
      # fail
    end
  end
end

# app/views/schools/new.html.erb
<%= form_for([@user, @school]) do |f| %>
  <!-- fields go here -->
<% end %>

# app/views/schools/edit.html.erb
<%= form_for([@user, @school]) do |f| %>
  <!-- fields go here -->
<% end %>
3 голосов
/ 14 апреля 2012

У меня только что была похожая проблема с уникальным ресурсом профиля в моем файле rout.rb:

resource :profile

Мне понадобилось несколько часов, чтобы найти решение, поэтому я решил поделиться им, чтобы избавить кого-то еще от неприятностей.
Мне пришлось удалить часть маршрута " (.: format) " (отображается при запуске "rake route"), указав определенный формат:

constraints :format => "html" do  
  resource :profile  
end  

Мне также пришлось добавить опцию: url в теги form_for:

<% form_for(@profile, :url => profile_path) %>

и это сработало.

...