0

contenteditable DIV から HTML をデータベースに保存しようとしています。データは正常に投稿されていますが、データベースの挿入時にはnil.

これが私のログです:

Started POST "/pages" for 127.0.0.1 at 2012-04-29 18:39:01 +0800
Processing by PagesController#create as */*
  Parameters: {"authenticity_token"=>"yAkOgEXN1Xq6Aiu6thcODiji7rs0SYA07/83XkQ2sBM=", "title"=>"Untitled Page", "live"=>"1", "content"=>"%3Cdiv%20class%3D%22page%20last-page-active%22%20style%3D%22height%3A%20576px%3B%20%22%3E%0A%20%20%20%20%0A%20%20%3Cdiv%20class%3D%22page-element%20page-element-textbox%20ui-draggable%20ui-resizable%20ui-resizable-disabled%20ui-state-disabled%22%20style%3D%22left%3A%201256px%3B%20top%3A%2080px%3B%20width%3A%20272px%3B%20%22%20aria-disabled%3D%22true%22%3E%3Cdiv%20class%3D%22page-element-content%22%20contenteditable%3D%22true%22%3E%3Ch2%3EUntitled%20Page%3C/h2%3E%3C/div%3E%3Cdiv%20class%3D%22ui-resizable-handle%20ui-resizable-e%22%20style%3D%22display%3A%20none%3B%20%22%3E%3C/div%3E%3Cdiv%20class%3D%22ui-resizable-handle%20ui-resizable-w%22%20style%3D%22display%3A%20none%3B%20%22%3E%3C/div%3E%3C/div%3E%0A%3C/div%3E"}
  SQL (0.2ms)  BEGIN
  SQL (1.2ms)  INSERT INTO `pages` (`content`, `created_at`, `live`, `title`, `updated_at`) VALUES (?, ?, ?, ?, ?)  [["content", nil], ["created_at", Sun, 29 Apr 2012 10:39:01 UTC +00:00], ["live", nil], ["title", nil], ["updated_at", Sun, 29 Apr 2012 10:39:01 UTC +00:00]]
   (1.9ms)  COMMIT

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

class PagesController < ApplicationController
  def index
    @pages = Page.all
    @page = Page.new

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

  def new
    @page = Page.new

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

  def create
    @page = Page.new(params[:page])

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

  def show
    @page = Page.find(params[:id])

    respond_to do |format|
      format.html  # show.html.erb
      format.json  { render :json => @page }
    end
  end
end
4

2 に答える 2

1
@page = Page.new(params[:page])

する必要があります

@page = Page.new(params)

コンソール出力で確認できます。

Parameters: {"authenticity_token"=>"...", "title"=>"Untitled Page", "live"=>"1", "content"=>"..."}

params[:page]正しい場合は、次のように表示されます。

Parameters: {"authenticity_token"=>"...", "page"=>{"title"=>"Untitled Page", "live"=>"1", "content"=>"..."}}
于 2012-04-29T10:53:52.597 に答える
1

コントローラーはparams[:page]、ページを作成するための値を含むハッシュであると想定しています。ただし、ログ ファイルの抜粋からわかるように、フォームはこれらすべてのパラメーターを最上位で送信しています。

パラメータが 内params[:page]に表示されるように、フォームを変更する必要があります。たとえば、タイトル入力は という名前にする必要がありますpage[title]。使用form_forしてレールが役立つ場合 (など) f.text_fieldf.check_boxこれを無料で入手できます。

于 2012-04-29T10:56:04.630 に答える