ActionController:: UrlGenerationError отсутствует требуемые ключи: [: id]

Я очень новичок в рубине - опрокидываю рельсы, и я застрял, пытаясь сделать простую регистрационную форму:

<%= form_for :user, url: user_path do |f| %>
    <p>
      <%= f.label :email %><br>
      <%= f.text_field :email %>
    </p>

    <p>
      <%= f.label :password %><br>
      <%= f.password_field :password %>
    </p>

    <p>
      <%= f.submit %>
    </p>
<% end %>

Это дает ошибку:

No route matches {:action=>"show", :controller=>"user"} missing required keys: [:id]

Может кто-нибудь объяснить, что это на самом деле означает?

EDIT:

Я следую этому руководству, только меняя сообщения пользователю: http://guides.rubyonrails.org/getting_started.html

Ответ 1

form_for всегда должен получить объект.. как пользователь с контроллера

# controller
def new
  @user = User.new
end

# form
<%= form_for @user,...

Или вы можете использовать метод form_tag, который не полагается на объект.

Ответ 2

Посмотрев на свой код, вы используете user_path, который создает ссылку для одного пользователя, этот код в идеале должен быть user_path(@user), поэтому вы получаете эту ошибку с запросом идентификатора.

В вашем случае вы указали правильную модель, путь, но не создали экземпляр объекта, поэтому вы получаете ошибку id со ссылкой на действие show, потому что user_path требуется идентификатор конкретного пользователя вы после.

Надеюсь, это прояснит ситуацию.

Ответ 3

Я предполагаю, что ваша проблема уже решена, но я подумал, что я также хотел бы указать, что если вы хотите следовать соглашению Rails, ваш контроллер должен быть множественным (UsersController):) Это намного облегчает игру с учебниками, которые вы следуйте, чтобы изменить результат по своему вкусу!