0

これは私を夢中にさせています。プロジェクト内の 2 つのモデル間にネストされた関係があり、子オブジェクト (年) は親 (祭り) のコンテキストの外では意味がないため、それを浅くしたくないと判断しました。

そのため、関係への参照を見つけることができる場所ならどこでも関係を浅くしましたが、ページにアクセスして新しい子オブジェクトを作成することができないことに気付きました。

私が理解しているURLは次のとおりです。/festivals/1/years/new

routes.rb から:

resources :festivals do
   resources :years
end

years_controller.rb から:

# GET festivals/1/years/new
# GET festivals/1/years/new.json
def new
  @festival = Festival.find(params[:festival_id])
  @year = @festival.years.build

  respond_to do |format|
    format.html # new.html.erb
    format.json { render :json => @year }
  end
end

そして、ユーザーが New ページ (親オブジェクトの Show ページ) にアクセスするために押すボタン:

<%= link_to 'Add Year', new_festival_year_path(@festival), :class => 'btn' %>

これにより、ユーザーは正しい URL に移動しますが、次のようになります。

No route matches {:action=>"show", :controller=>"years", :festival_id=>#<Festival id: 7, name: "Improganza", founded: nil, logo: "", mission: "This is that one that people spend a lot of money t...", city: "Honolulu", state_code: "HI", country_code: "US", created_at: "2013-07-26 14:49:19", updated_at: "2013-07-26 14:49:19">}

私は新しい Rails プロジェクトを作成し、Akria Matsuda の nested_scaffold gem を使用して scaffold をセットアップしました。その出力を私のコードと比較するためです...結果のファイルは、ここに示すように見えます。何が欠けているのかわかりません。

念のため、 my の出力rake routes:

            festival_years GET        /festivals/:festival_id/years(.:format)          years#index
                           POST       /festivals/:festival_id/years(.:format)          years#create
         new_festival_year GET        /festivals/:festival_id/years/new(.:format)      years#new
        edit_festival_year GET        /festivals/:festival_id/years/:id/edit(.:format) years#edit
             festival_year GET        /festivals/:festival_id/years/:id(.:format)      years#show
                           PUT        /festivals/:festival_id/years/:id(.:format)      years#update
                           DELETE     /festivals/:festival_id/years/:id(.:format)      years#destroy
                 festivals GET        /festivals(.:format)                             festivals#index
                           POST       /festivals(.:format)                             festivals#create
              new_festival GET        /festivals/new(.:format)                         festivals#new
             edit_festival GET        /festivals/:id/edit(.:format)                    festivals#edit
                  festival GET        /festivals/:id(.:format)                         festivals#show
                           PUT        /festivals/:id(.:format)                         festivals#update
                           DELETE     /festivals/:id(.:format)                         festivals#destroy
                           GET        /festivals(.:format)                             festivals#index
                           POST       /festivals(.:format)                             festivals#create
                           GET        /festivals/new(.:format)                         festivals#new
                           GET        /festivals/:id/edit(.:format)                    festivals#edit
                           GET        /festivals/:id(.:format)                         festivals#show
                           PUT        /festivals/:id(.:format)                         festivals#update
                           DELETE     /festivals/:id(.:format)                         festivals#destroy
4

3 に答える 3

1

これを試して:

<%= link_to 'Add Year', new_festival_year_path(@festival.id, :class => 'btn' %>    

また

<%= link_to 'Add Year', new_festival_year_path({festival_id: @festival.id}, :class => 'btn' %>

あなたが得ているエラーによると

:festival_id=>#<Festival id: 7, name: "Improganza", founded: nil, logo: "", mission: "This is that one that people spend a lot of money t...", city: "Honolulu", state_code: "HI", country_code: "US", created_at: "2013-07-26 14:49:19", updated_at: "2013-07-26 14:49:19">}

ルーターは、フェスティバルのパラメーター全体を入力として取得しています:festival_id

于 2013-07-30T20:46:39.037 に答える
0

years_controller で #newandアクションをマージしていると思いますが、それが問題を引き起こしている可能性があります。#year

# GET festivals/1/years/new
# GET festivals/1/years/new.json
def new
  @festival = Festival.find(params[:festival_id])
  @year = @festival.years.build
end

def create
  @festival = Festival.find(params[:festival_id])
  @year = @festival.years.create(...)
  #...fill in the rest of the method...
end

また、リンクを更新する必要があります。

<%= link_to 'Add Year', new_festival_year_path(festival_id: @festival), :class => 'btn' %>

役立つかもしれない入れ子になったリソースに関する短いクイズを作成しました。

于 2013-07-30T20:50:22.037 に答える
0

答えはかなりばかげていました。私の Rails サーバー ログ (もっと注意を払うように自分自身をトレーニングする必要があります) で、_form.html.erbパーシャルの 63 行目に問題を示す行がいくつかありました。

その行は次のとおりです。

<%= link_to t('.cancel', :default => t("helpers.links.cancel")),
   festival_year_path(@festival), :class => 'btn' %>

おっとっと。「キャンセル」ボタンで1 年(もちろん、それは存在しません) に進むべきだと私が決めた理由は、私には理解できません。私はそれを変更しましたがfestival_path(@festival)、それはすべて良いです。

皆さん、助けてくれてありがとう。私は StackOverflow と Rails 全般の初心者です。迅速な対応をしていただき、本当にうれしく思います!

于 2013-07-31T18:31:52.343 に答える