Я новичок. Я прочитал документацию по API. Но до сих пор не понимаю, как работает form_for.как form_for работает в Ruby on Rails
Во-первых, из Ruby On Rails Tutorial, форма для кнопки наблюдения:
<%= form_for(current_user.relationships.build(followed_id: @user.id)) do |f| %>
<div><%= f.hidden_field :followed_id %></div>
<%= f.submit "Follow", class: "btn btn-large btn-primary" %>
<% end %>
Я понимаю current_user.relationships.build(followed_id: @user.id)
означает новый рекорд. Но почему мы не можем просто отправить и запустить контроллер, чтобы сохранить запись без hidden_field? Почему нам все еще нужно отправлять follow_id контроллеру?
Во-вторых, в hidden_field, что означает :followed_id
? Я считаю, что это символ, т. Е. Он равен только «follow_id», а не переменной id. Если это только имя поля ввода, то каково его значение?
В-третьих, как form_for
знать, куда отправить отправку? Какой контроллер и действие отправит form_for
?
В-четвертых, как params
Работает с form_for
? В этом случае с кнопкой мыши, params[:relationship][:followed_id]
вернет @user.id
в контроллер. Как он знает, что первый хеш-атрибут - :relationship
? Мы не упомянули form_for :relationship
или form_for @relationship
.
Я знаю, что эти вопросы могут быть очень глупыми, но я действительно застрял. Любая помощь будет оценена.
Большое вам спасибо. Это отличный ответ. Но я все еще смущен. Во-первых, если вход после «form_for» - это путь. Затем form_for Myobject.new и Myobject.build должны направить нас к действию «новый» и «построить»? Но вместо этого он направляет меня к действию «творить». В любом случае, это не большая проблема, пока я понимаю, как он перенаправляет меня на правильный контроллер. –
в 'form_for current_user.relationships.build (follow_id: @ user.id)', 'form_for' нужна только первая часть' current_user.relationships.build'. Это означает, что последняя часть '(follow_id: @ user.id)' не нужна, я прав? Или он играет некоторые роли, чтобы помочь значение hidden_field? Я думаю, что до сих пор не получаю ответа на мой первый и второй вопрос. Может быть, мне нужно больше времени, чтобы прочитать Rails Guides, которые вы предложили в первую очередь. Спасибо –
Вам нужно указать рельсы, что вы хотите построить, с соответствующей информацией, так что да, вам нужна последняя часть. Метод build используется, когда существует ассоциация модели. Вы можете проверить [api] (http://api.rubyonrails.org/classes/ActiveRecord/Associations/CollectionProxy.html#method-i-build). Если вы не добавите @ user.id, то follow_id приведет к нулю. –