1

単一のリソース ( ) 内にリソースが埋め込まれており、ヘルパー/profile/workoutに問題があります。form_for

profileに基づいているだけなので、次のヘルパーを定義しましたcurrent_user(正しいURLにリダイレクトするだけです):

def workout_path(*args)
    profile_workout_path(*args)
end

私は次のモデルを持っています:

class Workout
  include Mongoid::Document
  include Mongoid::Timestamps

  field :name, type: String

  embedded_in :user
  embeds_many :movements
  accepts_nested_attributes_for :movements
end

コントローラ:

def new
  @workout = current_user.workouts.build
  @workout.movements.build
end

ルート:

ComposerDelete::Application.routes.draw do
  authenticated :user do
    root :to => 'home#index'
  end

  root :to => "home#index"
  devise_for :users
  resources :users do
  end

  resource :profile do
    resources :workouts
  end
end

そしてフォーム

= form_for @workout do |f|
  %fieldset
    = f.label :name
    = f.text_field :name
    = f.fields_for :movements do |builder|
      = render "movement_fields", f: builder
    = link_to_add_fields "Add Movement", f, :movements
    = f.submit "Create"

url: にアクセスするhttp://localhost:3500/profile/workouts/50b99b70f0f800cd53000002/editと、フォームには次のヘッダーがあります。

<form accept-charset="UTF-8" action="/profile/workouts/50b99b70f0f800cd53000002" class="edit_workout" id="edit_workout_50b99b70f0f800cd53000002" method="post">

正しい ID ( edit_<model>_<id>) を取得しますが、間違ったメソッド ( post、する必要がありますput) を取得します。また、送信ボタンにはCreateの代わりに表示されますUpdate。フォームは正しく機能し、ワークアウトを更新します。

レーキルート:

                    root        /                                    home#index
                    root        /                                    home#index
        new_user_session GET    /users/sign_in(.:format)             devise/sessions#new
            user_session POST   /users/sign_in(.:format)             devise/sessions#create
    destroy_user_session DELETE /users/sign_out(.:format)            devise/sessions#destroy
           user_password POST   /users/password(.:format)            devise/passwords#create
       new_user_password GET    /users/password/new(.:format)        devise/passwords#new
      edit_user_password GET    /users/password/edit(.:format)       devise/passwords#edit
                         PUT    /users/password(.:format)            devise/passwords#update
cancel_user_registration GET    /users/cancel(.:format)              devise/registrations#cancel
       user_registration POST   /users(.:format)                     devise/registrations#create
   new_user_registration GET    /users/sign_up(.:format)             devise/registrations#new
  edit_user_registration GET    /users/edit(.:format)                devise/registrations#edit
                         PUT    /users(.:format)                     devise/registrations#update
                         DELETE /users(.:format)                     devise/registrations#destroy
                   users GET    /users(.:format)                     users#index
                         POST   /users(.:format)                     users#create
                new_user GET    /users/new(.:format)                 users#new
               edit_user GET    /users/:id/edit(.:format)            users#edit
                    user GET    /users/:id(.:format)                 users#show
                         PUT    /users/:id(.:format)                 users#update
                         DELETE /users/:id(.:format)                 users#destroy
        profile_workouts GET    /profile/workouts(.:format)          workouts#index
                         POST   /profile/workouts(.:format)          workouts#create
     new_profile_workout GET    /profile/workouts/new(.:format)      workouts#new
    edit_profile_workout GET    /profile/workouts/:id/edit(.:format) workouts#edit
         profile_workout GET    /profile/workouts/:id(.:format)      workouts#show
                         PUT    /profile/workouts/:id(.:format)      workouts#update
                         DELETE /profile/workouts/:id(.:format)      workouts#destroy
                 profile POST   /profile(.:format)                   profiles#create
             new_profile GET    /profile/new(.:format)               profiles#new
            edit_profile GET    /profile/edit(.:format)              profiles#edit
                         GET    /profile(.:format)                   profiles#show
                         PUT    /profile(.:format)                   profiles#update
                         DELETE /profile(.:format)                   profiles#destroy
4

1 に答える 1

1

このメソッドは常にPOST, notになりPUTます - お使いのブラウザーはネイティブにサポートしていないPUTため、Rails はフォーム内の非表示のフォーム フィールドを_method=PUT. これに関するドキュメントについては、こちらを参照してください。

また、独自のコードに記載されている= f.submit "Create"ため、ボタンに「作成」と表示されても不思議ではありません。

于 2012-12-04T07:27:41.330 に答える