0

各プロジェクトは単一のページを持つことができます:

resources :project do
    resource :page
  end

  class Project < ActiveRecord::Base
    has_one :page
  end

  class Page < ActiveRecord::Base
    belongs_to :project
  end


  def new
    @project = Project.find(params[:project_id])
    @page = @project.build_page
      respond_to do |format|
        format.html
      end
    end

    def create
      @project = Project.find(params[:project_id])
      @page = @project.build_page(params[:page_id])

      respond_to do |format|
        if @page.save
          format.html { redirect_to @page, :notice => 'Page was successfully created.' }
        else
          format.html { render action: "new" }
        end
      end
    end

しかし、ページを保存しようとすると、ルーティング エラーが発生するだけでなく、実際にはデータベースに保存されません。

Routing Error

No route matches [POST] "/projects/2/pages"

私のフォームアクションは次のようになります:

<%= form_for([@job, @page]) do |f| %>

何が起こっているのか誰にもわかりませんか?私は他のSOの投稿からこれらすべてをつなぎ合わせましたが、あちこちで行を変更するほど、実用的な解決策から遠ざかっているように感じます. たとえば、フォーム アクションを次のように変更するとします。

<%= form_for @page, url: job_page_path(@job) do |f| %>

すべてが魔法のように機能しますが、編集アクションはまだ壊れています。私はどのような基本的な概念を屠殺していますか?

ありがとう! - マーク

4

1 に答える 1

0

タイプミスがあります:

 resource :page

する必要があります

 resources :page

(s に注意してください)

resource(singular) は、実際には、異なるルート セットを構築するまったく異なる方法です。詳細については、ドキュメントを参照してください。

更新/エラッタ

すみません、あなたの質問を読むのが早すぎました。Ruby on rails: singular resource と form_for を見てください- それはform_for特異なリソースを適切に処理する方法を知らないようです。

SO の誰かが、これに対する簡単な修正を提案しています: nested form_for singular resource

于 2013-02-03T03:13:33.310 に答える