0

著者は UPS の足場を構築し、レールはモデルをupではなくとして作成しましたups。いくつかのソリューションをハックして機能させましたが、新しいフォームから呼び出されたときに create メソッドを機能させることができません。Rails は index 関数を呼び出しますが、新しいオブジェクトは作成されません。

ups_controller.rb

def create
    @up = Ups.new(params[:up])

    respond_to do |format|
      if @up.save
        format.html { redirect_to @up, notice: 'Up was successfully created.' }
        format.json { render json: @up, status: :created, location: @up }
      else
        format.html { render action: "new" }
        format.json { render json: @up.errors, status: :unprocessable_entity }
      end
    end
  end

def new
  @up = Ups.new

   respond_to do |format|
     format.html # new.html.erb
     format.json { render json: @up }
   end
end

ups/form.html.erb

<%= form_for(@up) do |f| %>

<table class="table table-striped table-bordered">
        <tr>
            <th>name</th>
            <td><%= f.text_field :name %></td>
        </tr>
        <tr>
            <th>attr</th>
            <td><%= f.select :attr_id, options_from_collection_for_select(Attr.order(:name).where(:major => true).all, "id", "name", @up.attr_id) %></td>
        </tr>
        <tr>
            <th>Action</th>     
            <td><%= f.submit "Submit New UPS" %></td>
        </tr>
    </table>
<% end %>

ルート.rb

  resources :ups

  match 'ups/create' => 'ups#create'
  match 'ups/index' => 'ups#index'
  match 'pdus/link_all_ups' => 'pdus#link_all_ups'

ups_controller の新しいメソッドを呼び出すボタンは次のとおりです。

<%= link_to 'Enter New UPS', new_ups_path, :class => "btn btn-success pull-right" %>

レーキルート

                                 ups GET    /ups(.:format)                                          ups#index
                                     POST   /ups(.:format)                                          ups#create
                              new_up GET    /ups/new(.:format)                                      ups#new
                             edit_up GET    /ups/:id/edit(.:format)                                 ups#edit
                                  up GET    /ups/:id(.:format)                                      ups#show
                                     PUT    /ups/:id(.:format)                                      ups#update
                                     DELETE /ups/:id(.:format)                                      ups#destroy
                           ups_index        /ups/index(.:format)                                    ups#index

アドバイスをありがとう。

4

1 に答える 1

1

また、Rails が次のような Post リクエストを送信していることを確認する必要があります。

<%= form_for @up, :url=> ups_path, :method => :post do |f| %>

私の推測では、あなたの URL は正しいのですが、投稿ではなく get として送信することにレールがかかっています。ルートからわかるように、index アクションと create アクションは両方とも同じ URL を持ち、唯一の違いは get/post です。

ups GET    /ups(.:format)    ups#index

    POST   /ups(.:format)    ups#create  
于 2013-06-14T14:06:32.927 に答える