3

Rails 4 で、コントローラーの URL からパラメーターを取得するのに問題があります。

has_many と belongs_to の関連付けを持つ 2 つのモデルがあります。これらを Books と Pages と呼びましょう。新しい Page レコードを作成し、ユーザーが [作成] ボタンをクリックしたときにアクセスしていた本に応じて Book モデルにリンクさせたい (つまり、ユーザーがジュラシック パークの本のページにいて [作成] をクリックした場合) " ジュラシック パークの本に関連する新しいページを作成したい)。

これが私の見解からの作成リンクです:

<%= link_to "Create page", new_page_path(:book => @book.id), :id => "submit-button" %>

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

def new
  @page = Page.new
end

def create
  @book = Book.find(params[:book])
  @page = Product.new(page_params)
  @page.book_id = @book.id
  if @page.save
    flash[:success] = "Page Submitted!"
    redirect_to @book
  else
    render 'new'
  end
end

次のエラーが表示されます。

「ActiveRecord::RecordNotFound in PagesController#create - ID のない本が見つかりませんでした」

私はこれを完全に間違っていますか?Rails 4 では、URL パラメーターを取得するのと同じ構文である params の動作方法が変更されたことを知っているため、おそらくそれがこの問題の原因です。

編集:「new」からパラメーターを変数として取得し、それを ID として使用しようとしましたが、同じエラー メッセージが表示されます。

4

2 に答える 2

0

new_page_path は、こ​​こで GET である「新しい」アクションを呼び出します。期待どおりに「作成」アクションを呼び出しません。「作成」アクションを呼び出すのが理想的です。これを試して:

button_to 'Create Page', pages_path(:book => @book.id), :method => :post

通常、link_to は GET アクションのみを指す必要があります。このような場合は、button_to を使用することをお勧めします。

于 2013-06-04T19:48:36.253 に答える
0

あなたが探していると思います (:book の代わりに :id に注意してください):

<%= link_to "Create page", new_page_path(:id => @book.id), :id => "submit-button" %>

次に、create メソッドを次のように更新します。

def create
  @book = Book.find(params[:id])
  ...
end
于 2015-05-29T11:45:31.337 に答える