我已經創建了一個資源。Rails 3表單操作和方法
resources :dashboards
我有一個包含表單中的部分文件,我想用這個部分(如表單元素不會改變)來更新和創造。因此,這裏是我:
控制器
class DashboardsController < ApplicationController
def new
@dashboard = Dashboard.new
end
end
查看
/dashboards/new.html.erb
<%= render :partial => "form", :locals => { :dashboard => @dashboard } %>
部分形式,
/dashboards/_form.html.erb
<%= form_for(@dashboard) do |form| %>
.....
<% end %>
紅寶石指南
紅寶石指南指出:
Article模型是直接提供給應用程序的用戶,所以 - 繼使用Rails進行開發的最佳實踐 - 您應該將其聲明爲資源。在處理RESTful資源時,如果依靠記錄標識,對form_for的調用可以變得更加容易。 簡而言之,您只需傳遞模型實例並讓Rails找出模型名稱和其餘部分。例如:
## Creating a new article
# long-style:
form_for(@article, :url => articles_path)
# same thing, short-style (record identification gets used):
form_for(@article)
## Editing an existing article
# long-style:
form_for(@article, :url => article_path(@article), :html => { :method => "put" })
# short-style:
form_for(@article)
結果
我以爲我已經正確執行了Rails的指南。因爲我讓@dashboard成爲資源。我可以將它傳遞給表單並讓它處理動作,方法和其他。相反,我得到這個:
<form accept-charset="UTF-8" action="/dashboards" class="new_dashboard" id="new_dashboard_" method="post">
根據文檔。現在我的表單的動作不應該是「/ dashboards/new」,因爲我們正在採取新的行動?如果在/ edit動作中使用相同的代碼,它應該傳遞一個額外的域來聲明要放置的方法?
無論結果如何,我的結果都是一樣的。表單從不改變。
我在做什麼錯?
編輯
這裏是rake routes
GET /dashboards(.:format) dashboards#index
POST /dashboards(.:format) dashboards#create
GET /dashboards/new(.:format) dashboards#new
GET /dashboards/:id/edit(.:format) dashboards#edit
GET /dashboards/:id(.:format) dashboards#show
PUT /dashboards/:id(.:format) dashboards#update
DELETE /dashboards/:id(.:format) dashboards#destroy
好吧,我得到了形式的行動改變到當前的控制器。我在'form_for'中傳遞'@ dashboard'而不是':dashboard'。但是現在,當我在控制器中的新動作時,表單動作不應該是/ dashboards/create not/dashboards/new? –
而且該方法沒有像表格那樣設置,如果我通過轉到/ dashboard /:/編輯 –
進行了更新,那麼將它更改爲':dashboard',那麼您將切換到使用[表單標籤助手](http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html)而不是(資源導向)[表單助手](http://api.rubyonrails.org/classes /ActionView/Helpers/FormHelper.html)。區別是混亂,看到這個答案更多關於兩者之間的區別:http://stackoverflow.com/questions/13537700/textarea-in-rails-form#13537848 –