1

私は2つの問題を抱えているようです

1)単一のネストされたリソースを更新しようとしている間

レストランhas_1時間

時間belongs_toレストラン

resources :restaurants do
  resource :hour
end

私のレストランのショーページに次のような編集リンクがあります。

<%= link_to 'Set Hour', edit_restaurant_hour_path([@restaurant, @restaurant.hour]) %>

編集ページには、次のような部分的なレンダリングがあります。

<%= render :partial => 'restaurants/hours', :locals => { :hour => 'hour' } %>

_hours.html.erbという名前の部分をロードします。

<%= form_for hour do |f| %>
<div class="row-fluid">
<div class="span1 hours_input">
  <h3>Monday</h1>
  From
  <%= f.text_field :from_monday, :class => 'span20 hour_field'  %>
  To
  <%= f.text_field :to_monday, :class => 'span20 hour_field'  %>
</div>
<div class="span1 hours_input">
  <h3>Tuesday</h3>
  From
  <%= f.text_field :from_tuesday, :class => 'span20 hour_field' %>
  To
  <%= f.text_field :to_tuesday, :class => 'span20 hour_field'  %>
</div>
<div class="span1">
  <%= f.submit 'Set Hours' %>
</div>
</div>

しかし、送信ボタンを押すと、エラーが発生します。

No route matches [POST] "/restaurants/34/hour/edit"

私はそれを次のように設定してみました:

<%= form_for hour, :method => put, :html => { :action => 'update' } do |f| %>

しかし、運がありません。どんな助けでも大歓迎です!レール3.2.3を使用しています

2)私の2番目の問題はかなり不思議です。

ボタンを押すと

<%= link_to 'Set Hour', edit_restaurant_hour_path([@restaurant, @restaurant.hour]) %>

レストランのショーページに、次のURLが表示されます。

http://localhost:3000/restaurants/34//hour/edit

//時間の前にダブルスラッシュを付けます。これは本番環境で機能しなくなると思いますが、開発中の私には影響がないようです。

繰り返しになりますが、読んでくれてありがとう、そして良いものを持ってください!

編集:これがレーキルートです-

  restaurant_hour POST   /restaurants/:restaurant_id/hour(.:format)      hours#create

 new_restaurant_hour GET    /restaurants/:restaurant_id/hour/new(.:format)       hours#new

  edit_restaurant_hour GET    /restaurants/:restaurant_id/hour/edit(.:format)  hours#edit

  GET    /restaurants/:restaurant_id/hour(.:format)               hours#show

  PUT    /restaurants/:restaurant_id/hour(.:format)               hours#update

  DELETE /restaurants/:restaurant_id/hour(.:format)               hours#destroy

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

  POST   /restaurants(.:format)                                   restaurants#create

  new_restaurant GET    /restaurants/new(.:format)                restaurants#new

  edit_restaurant GET    /restaurants/:id/edit(.:format)          restaurants#edit

  restaurant GET    /restaurants/:id(.:format)                    restaurants#show

  PUT    /restaurants/:id(.:format)                               restaurants#update

  DELETE /restaurants/:id(.:format)                               restaurants#destroy

  hour GET    /:restaurant/hour(.:format)                         hours#show

  POST   /:restaurant/hour(.:format)                              hours#create

  hour_add GET    /:restaurant/hour/add(.:format)                 hours#new

  hour_edit GET    /:restaurant/hour/edit(.:format)                         hours#edit
4

1 に答える 1

0

私はそれを理解しました、しかしそれは明らかにそれをするためのRESTfulな方法ではありません。

追加する必要がありました:

<%= form_for hour, :url => { :action => "update" }, :html => { :method => 'put' } do |f| %>

更新を機能させるためのアクション/メソッドを指定します。

別の投稿では、以下を使用することを提案しています。

<%= form_for @hour do |f| %>

うまくいったはずなのに、どういうわけか運が悪かった。

于 2012-08-13T00:04:17.440 に答える