-1

以下の2行の違いを理解するのに苦労しています。唯一の違いは:url =>の使い方です

1- ビューの次の行でエラーが発生しています (form_for を削除するとエラーが削除され、エラーなしでレンダリングが行われます)。

<%= form_for( [@company, @appointment], :action => 'company_edit', :html => {:class => "form-horizontal"}) do |f| %>

エラーの意味を理解するために多くの時間を費やしましたが、「company_edit」がどこから来ているのかわかりません。

ActionView::Template::Error (undefined method `company_appointment_path' for #<#<Class:0x5047cc8>:0x5045070>):
9:       </div>
10:       <div class="widget-content nopadding">
11:         <!--form action="#" method="get" class="form-horizontal"-->
12:         <%= form_for([@company, @appointment], :action => 'company_edit', :html => {:class => "form-horizontal"}) do |f| %>
13:           <% if @appointment.errors.any? %>
14:             <div class="control-group">
15:                 <div id="error_explanation">
app/views/appointments/company_edit.html.erb:12:in `_app_views_appointments_company_edit_html_erb___287242072_42128364'

これが私のルートファイルのスニペットです:

resources :companies do

  resources :appointments, only: [:company_edit] do
    member do
      get 'company_edit', :as => :company_edit
    end
  end
end

2- :url を使用すると、すべてが再び機能することがわかりましたが、なぜですか?

<%= form_for([@company, @appointment], :url => {:action => 'company_edit'}, :html => {:class => "form-horizontal"}) do |f| %>

私は多くの場所で「form_for」を使用しており、「:url =>」を使用したことがないため、これを理解しようとしています。「form_for」を正しく使用していないかどうか、そして今更新する必要があることを知りたいヘルパーを適切に使用するためのコード。


編集

これは私のコントローラーです:

def company_edit
    @appointment = Appointment.find(params[:id])
    @company = Company.find(params[:company_id])

end
4

1 に答える 1

1

申し訳ありませんが、あなたの質問に対する答えはノーです。

:actionは、 によって認識されるオプション パラメータではありませんform_for

API は次のとおりです。

http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_for

:urlはそれが認識するオプションであり、それ自体に を含むオプション ハッシュが含まれています:action

それが役立つことを願っています。

于 2013-01-23T21:45:57.397 に答える