Sta*_*ack 5 forms routes insert-update ruby-on-rails-3
我有一个表单来创建广告.
控制器:
def edit
@engines = Engine.all
@car = Car.find(params[:id])
end
def update
@car = Car.find(params[:id])
if @car.save
redirect_to root_path
end
end
Run Code Online (Sandbox Code Playgroud)
我的路线:
resources :adverts
Run Code Online (Sandbox Code Playgroud)
Create.html.erb
<%= form_for @car, :url => adverts_path do |f| %>
<div><%= f.label :name %><br />
<%= f.text_field :name %></div>
<%= hidden_field_tag :model_id, params[:model_id] %>
<%= select_tag :engine_id, options_from_collection_for_select(@engines, "id", "name",:selected=>@car.engine_id) %>
<div><%= f.submit "Create car!" %></div>
<% end %>
Run Code Online (Sandbox Code Playgroud)
我可以创建广告,但我不能更新它.
edit.html.erb
<%= form_for @car, :url => adverts_path do |f| %>
<div><%= f.label :name %><br />
<%= f.text_field :name %></div>
<%= hidden_field_tag :model_id, params[:model_id] %>
<%= select_tag :engine_id, options_from_collection_for_select(@engines, "id", "name",:selected=>@car.engine_id) %>
<div><%= f.submit "Update car!" %></div>
<% end %>
Run Code Online (Sandbox Code Playgroud)
当我提交表单时,我有一个错误 - 没有路由匹配[PUT]"/ adverts"
$ rake路线:
adverts GET /adverts(.:format) adverts#index
POST /adverts(.:format) adverts#create
new_advert GET /adverts/new(.:format) adverts#new
edit_advert GET /adverts/:id/edit(.:format) adverts#edit
advert GET /adverts/:id(.:format) adverts#show
PUT /adverts/:id(.:format) adverts#update
DELETE /adverts/:id(.:format) adverts#destroy
Run Code Online (Sandbox Code Playgroud)
我需要帮助.
Mis*_*cha 15
当你更新时,你必须通过传递让Rails知道你要更新哪个对象id.
在edit.html.erb变化:
<%= form_for @car, :url => adverts_path do |f| %>
Run Code Online (Sandbox Code Playgroud)
至:
<%= form_for @car, :url => advert_path(@car) do |f| %>
Run Code Online (Sandbox Code Playgroud)
顺便说一下,我觉得你的代码很奇怪.为什么您的型号名称与您的控制器和路线不匹配?我的意思是你正在创建一个广告,但你的模型叫做汽车.这没有任何意义.无论是汽车还是广告,都不要混用它们.
| 归档时间: |
|
| 查看次数: |
13227 次 |
| 最近记录: |