0

Rails は私のフォーム用にこのアクション URL を生成しました:

<form action="/auth/failure?action=update&controller=users"...

私はウェブサイトに認証されています。認証されていない場合でも、認証を理解しているため、どこかにリダイレクトされます。

私のフォームコード:

<%= form_for @user, :url => { 'controller' => 'users', 'action' => 'update'} do |f| %>

ありがとう!

4

1 に答える 1

1

知っておくべきことが2つあります

  • Ruby は、記号 ( :controller:update) と文字列 ( 'controller'、 ) を区別します'update'
  • この場合、指定する必要はありません:url

したがって、現在のコードでは、正しい行は単純です。

form_for @user do |f|

@userが新しいレコードの場合は、 のアクションをform_for指し、 が既存のレコードの場合は、自動的にアクションを指します。Railsはこれを行うのに十分賢いです:-)createUsersController@userform_forupdate

:url本当にの属性を使用したい場合はform_for、次の 2 つのオプションがあります。

  • ルーティング ヘルパー メソッドを使用します。form_for @user, :url => user_path(@user), :method => :put
  • 正しいパス ハッシュを使用します。form_for @user, :url => { :controller => :users, :method => :update, :id => @user.id }

resources :usersRails では、REST スタイルを使用してURL を作成する場合config/route.rb(これを使用することをお勧めします)、知っておく必要があることが 2 つあります。 -コレクションはエンティティのグループ (この場合はユーザー) -メンバーは 1 つのエンティティです。

したがって、コレクション URL は複数のエンティティが期待できるものであり、メンバー URL は 1 つのエンティティしか期待できないものです。

コレクションではなくメンバーに対してのみ実行できるため、URL ハッシュでアクションを:id記述する場合は使用する必要があります。したがって、何をしたいのかを明確にするために、特別な HTTP メソッド ( ) を使用してメンバー URL を作成する必要があります。updateupdatePUT

于 2013-08-29T15:21:14.263 に答える