Ответ 1
form_for всегда должен получить объект.. как пользователь с контроллера
# controller
def new
@user = User.new
end
# form
<%= form_for @user,...
Или вы можете использовать метод form_tag, который не полагается на объект.
Я очень новичок в рубине - опрокидываю рельсы, и я застрял, пытаясь сделать простую регистрационную форму:
<%= 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
form_for всегда должен получить объект.. как пользователь с контроллера
# controller
def new
@user = User.new
end
# form
<%= form_for @user,...
Или вы можете использовать метод form_tag, который не полагается на объект.
Посмотрев на свой код, вы используете user_path
, который создает ссылку для одного пользователя, этот код в идеале должен быть user_path(@user)
, поэтому вы получаете эту ошибку с запросом идентификатора.
В вашем случае вы указали правильную модель, путь, но не создали экземпляр объекта, поэтому вы получаете ошибку id со ссылкой на действие show, потому что user_path
требуется идентификатор конкретного пользователя вы после.
Надеюсь, это прояснит ситуацию.
Я предполагаю, что ваша проблема уже решена, но я подумал, что я также хотел бы указать, что если вы хотите следовать соглашению Rails, ваш контроллер должен быть множественным (UsersController):) Это намного облегчает игру с учебниками, которые вы следуйте, чтобы изменить результат по своему вкусу!