![](/img/trans.png)
[英]How do i route a particular controller action to a particular form in rails?
[英]How do I route an edit form to the update action in my controller? (Rails app)
我正在為定制西裝業務開發應用程序。 該應用程序存儲用戶的度量,並為他們提供編輯這些度量以及任何訂單開始的機會。 編輯表單看起來不錯,但是如果我單擊“提交”,我將得到“未知操作-無法為MeasurementsController找到操作'更新'。” 但是,我確實在該控制器中執行了更新操作。 怎么了?
控制器代碼
class MeasurementsController < ApplicationController
def new
@measurement = Measurement.new
end
def index
@measurement = Measurement.find(params[:id])
end
def create
@measurement = Measurement.new(safe_params)
@measurement.user_id = current_user.id
@measurement.save
redirect_to measurements_path(id: @measurement.id)
end
def edit
@measurement = Measurement.find_by(user_id: current_user.id)
end
def udpate
@measurement = Measurement.find_by(user_id: current_user.id)
if @measurement.update_attributes(safe_params)
redirect_to new_order_path #to be changed later
else
redirect_to root_path #to be changed later
end
end
private
def safe_params
params.require(:measurement).permit(:shoulders, :sleeve, :chest, :stomach, :jacket_length, :front, :back, :waist, :hips, :crotch, :pants_length, :thigh, :knee, :ankle)
end
end
部分編輯表格
<%= form_for(@measurement, :id => @measurement.id) do |f| %>
<table>
<% @measurement.attributes.each do |name, value| %>
<tr>
<% if name != 'created_at' && name != 'id' && name != 'updated_at' && name != 'user_id' && name != 'order_id' %>
<td><%= f.label name, id: "measurement-label"%></td>
<td id="measurement-input"><%= f.number_field name, :step => 'any', class: "form-control" %></td>
<% end %>
</tr>
<% end %>
</table>
<%= f.submit "Submit", class: "btn btn-primary" %>
為表單生成的HTML
<div class="container">
</div>
<div class="container">
<h1></h1>
<h2>Would you like to update your measurements?</h2>
<form class="edit_measurement" id="edit_measurement_5" action="/measurements/5" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓"><input type="hidden" name="_method" value="patch"><input type="hidden" name="authenticity_token" value="IYs39JMpzNqLvQOVISsenOj1gy3QaPklIhvP0xVd2SCLHTw8FHjTi9iTlmK8R7xHsauu3Rvfh8QasvbVsbcBVw==">
<table>
<tbody><tr>
</tr>
<tr>
<td><label id="measurement-label" for="measurement_shoulders">Shoulders</label></td>
<td id="measurement-input"><input step="any" class="form-control" type="number" value="9.0" name="measurement[shoulders]" id="measurement_shoulders"></td>
</tr>
<tr>
<td><label id="measurement-label" for="measurement_sleeve">Sleeve</label></td>
<td id="measurement-input"><input step="any" class="form-control" type="number" value="9.0" name="measurement[sleeve]" id="measurement_sleeve"></td>
</tr>
<tr>
<td><label id="measurement-label" for="measurement_chest">Chest</label></td>
<td id="measurement-input"><input step="any" class="form-control" type="number" value="9.0" name="measurement[chest]" id="measurement_chest"></td>
</tr>
<tr>
<td><label id="measurement-label" for="measurement_stomach">Stomach</label></td>
<td id="measurement-input"><input step="any" class="form-control" type="number" value="9.0" name="measurement[stomach]" id="measurement_stomach"></td>
</tr>
<tr>
<td><label id="measurement-label" for="measurement_jacket_length">Jacket length</label></td>
<td id="measurement-input"><input step="any" class="form-control" type="number" value="9.0" name="measurement[jacket_length]" id="measurement_jacket_length"></td>
</tr>
<tr>
<td><label id="measurement-label" for="measurement_front">Front</label></td>
<td id="measurement-input"><input step="any" class="form-control" type="number" value="9.0" name="measurement[front]" id="measurement_front"></td>
</tr>
<tr>
<td><label id="measurement-label" for="measurement_back">Back</label></td>
<td id="measurement-input"><input step="any" class="form-control" type="number" value="9.0" name="measurement[back]" id="measurement_back"></td>
</tr>
<tr>
<td><label id="measurement-label" for="measurement_waist">Waist</label></td>
<td id="measurement-input"><input step="any" class="form-control" type="number" value="9.0" name="measurement[waist]" id="measurement_waist"></td>
</tr>
<tr>
<td><label id="measurement-label" for="measurement_hips">Hips</label></td>
<td id="measurement-input"><input step="any" class="form-control" type="number" value="9.0" name="measurement[hips]" id="measurement_hips"></td>
</tr>
<tr>
<td><label id="measurement-label" for="measurement_crotch">Crotch</label></td>
<td id="measurement-input"><input step="any" class="form-control" type="number" value="9.0" name="measurement[crotch]" id="measurement_crotch"></td>
</tr>
<tr>
<td><label id="measurement-label" for="measurement_pants_length">Pants length</label></td>
<td id="measurement-input"><input step="any" class="form-control" type="number" value="9.0" name="measurement[pants_length]" id="measurement_pants_length"></td>
</tr>
<tr>
<td><label id="measurement-label" for="measurement_thigh">Thigh</label></td>
<td id="measurement-input"><input step="any" class="form-control" type="number" value="9.0" name="measurement[thigh]" id="measurement_thigh"></td>
</tr>
<tr>
<td><label id="measurement-label" for="measurement_knee">Knee</label></td>
<td id="measurement-input"><input step="any" class="form-control" type="number" value="9.0" name="measurement[knee]" id="measurement_knee"></td>
</tr>
<tr>
<td><label id="measurement-label" for="measurement_ankle">Ankle</label></td>
<td id="measurement-input"><input step="any" class="form-control" type="number" value="9.0" name="measurement[ankle]" id="measurement_ankle"></td>
</tr>
<tr>
</tr>
<tr>
</tr>
<tr>
</tr>
<tr>
</tr>
</tbody></table>
<input type="submit" name="commit" value="Submit" class="btn btn-primary">
看看您的方法update
是錯誤的:
代替udpate
進行update
。 以上你的方法udpate
並沒有方法udpate
應該update
。
上面的代碼是(錯誤的方法名稱udpate
):
def udpate
@measurement = Measurement.find_by(user_id: current_user.id)
if @measurement.update_attributes(safe_params)
redirect_to new_order_path #to be changed later
else
redirect_to root_path #to be changed later
end
end
改成:
def update
@measurement = Measurement.find_by(user_id: current_user.id)
if @measurement.update_attributes(safe_params)
redirect_to new_order_path #to be changed later
else
redirect_to root_path #to be changed later
end
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.