簡體   English   中英

如何將編輯表單路由到控制器中的update操作? (軌道應用)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM