0

私のアプリケーションでは、次のように「admin」にスコープされたリソースがいくつかあります (routes.rb 内):

scope 'admin', :as => 'admin' do
    resources :events
end

そのため、フォームから #new または #update メソッドを使用しようとすると、 ActionController 例外が発生してしまいますNo route matches [PUT] "/admin/events"

rake routes以下を生成します。

        admin_events GET    /admin/events(.:format)             events#index
                     POST   /admin/events(.:format)             events#create
     new_admin_event GET    /admin/events/new(.:format)         events#new
    edit_admin_event GET    /admin/events/:id/edit(.:format)    events#edit
         admin_event GET    /admin/events/:id(.:format)         events#show
                     PUT    /admin/events/:id(.:format)         events#update
                     DELETE /admin/events/:id(.:format)         events#destroy

_フォームコード:

<% if notice %>
  <p id="notice"><%= notice %></p>
<% end %>

<%= form_for @event, :html => { :class => 'form-horizontal' }, :url => url_for(:controller => 'events', :action => 'index') do |f| %>
<fieldset>

  <div class="control-group">
    <%= f.label :name, :class => 'control-label' %>
    <div class="controls">
      <%= f.text_field :name %>
    </div>
  </div>
  <div class="control-group">
    <%= f.label :event_date, :class => 'control-label' %>
    <div class="controls date-selects">
      <%= f.datetime_select :event_date, :start_year => 2012 %>
    </div>
  </div>
  <div class="control-group">
    <%= f.label :publish_date, :class => 'control-label' %>
    <div class="controls date-selects">
      <%= f.datetime_select :publish_date, :start_year => 2012 %>
    </div>
  </div>
  <div class="control-group">
    <%= f.label :blurb, :class => 'control-label' %>
    <div class="controls">
      <%= f.text_area :blurb, :class => 'span6 wysi' %>
    </div>
  </div>
  <div class="control-group">
    <%= f.label :graphic, :class => 'control-label' %>
    <div class="controls">
      <%= f.file_field :graphic %>
    </div>
  </div>
  <div class="control-group">
    <%= f.label :tix_link, :class => 'control-label' %>
    <div class="controls">
      <%= f.url_field :tix_link %>
    </div>
  </div>

  <div class="form-actions">
    <%= f.submit 'Submit', :class => 'btn-primary' %>
    <%= link_to t('.cancel', :default => t("helpers.links.cancel")), admin_events_path, :class => 'btn' %>
  </div>
</fieldset>
<% end %>

私は何を間違っていますか?

4

1 に答える 1

1

フォームタグを次の場所から変更してみてください。

<%= form_for @event, :html => { :class => 'form-horizontal' }, :url => url_for(:controller => 'events', :action => 'index') do |f| %>

に:

<%= form_for [:admin, @event], :html => { :class => 'form-horizontal' } do |f| %>

これにより、がデータベースに永続化されているadminかどうかに応じて、適切なスコープが使用され、URLが適切に生成されます。@event

于 2012-09-11T19:21:37.340 に答える