我是一個新手。我已閱讀API文檔。但仍不明白form_for的工作方式。form_for如何在Ruby on Rails中工作
首先,從Ruby on Rails的教程,後續按鈕形式:
<%= 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的記錄?爲什麼我們仍然需要將followed_id發佈到控制器?
其次,在hidden_field中,:followed_id
的含義是什麼?我認爲這是一個符號,即它只等於「followed_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(followed_id:@ user.id)'中的' –
','form_for'只需要第一部分'current_user.relationships.build'。這意味着最後一部分'(followed_id:@ user.id)'不是必需的,對嗎?還是它扮演一些角色來幫助hidden_field的價值?我想我的第一個和第二個問題仍然沒有得到答案。也許我應該花更多時間閱讀你首先建議的Rails指南。謝謝 –
你需要告訴軌道你想用適當的信息建立什麼,所以是的,你需要最後一部分。在有模型關聯時使用構建方法。您可以查看[api](http://api.rubyonrails.org/classes/ActiveRecord/Associations/CollectionProxy.html#method-i-build)。如果您不添加@ user.id,那麼followed_id將以零結果。 –