2016-08-13 7 views
2

私は少しのプロジェクトで作業を開始してレールとルビーに入り込もうとしました。シンプルなCRUDはオブジェクトを作成しません

オブジェクト用の単純なCRUDを作成しようとしていたので、作成部分はもう意味がありませんでした。

def create 
    if (params.nil? || params[:board].nil?) 
     return render status: 400 
    end 
    @board = Board.create(params["board"]["title"], params["board"]["description"]) 
    #... 
end 

何らかの理由で、それは私にと、ArgumentError与え "引数の数が間違って(2を与えられたが、0..1を期待しました)"。

これは私に NoMethodErrorを与える
@board = Board.new(params["board"]["title"], params["board"]["description"]) 
@board.save! 

「未定義のメソッド `reverse_merge:だから私は、私は単にそれを自分で作成し、データベースにそれを保存するために保存-メソッドを使用しますが、それはどちらかうまくいかなかっただろうと思いました! ' nilクラス:

私は今、デバッグをしようとしましたが、それを理解することはできません。そして、そうではありません、NilClassを使っていると言っていますが、それは無しではありません。

EDIT:フォームコード(ビュー)

<%= form_tag :action => 'create' do %> 

<div class="fluid-container"> 
    <p><label for="board_title">Title</label></p> 
    <%= text_field 'board', 'title' %> 
</div> 

<div class="fluid-container"> 
    <p><label for="board_description">Description</label></p> 
    <%= text_area 'board', 'description' %> 
</div> 

<%= submit_tag %> 
<% end %> 

私は本当にうまくいけば、誰かが助けることができ、何が起こっているのか分かりません。事前のおかげで - PREFIX /ドミニク

+0

を追加するには、フォームのコードを投稿してください。 –

答えて

0

代わり

@board = Board.create(params["board"]["title"], params["board"]["description"]) 

のは、あなたがこれも

@board = Board.create(params[:board]) 

が、仕事を文句を言わないセキュリティ上の理由を行うことができるはず

@board = Board.create(title: params["board"]["title"], description: params["board"]["description"]) 

を試してみてください http://api.rubyonrails.org/classes/ActionController/Parameters.html

+0

これも同様に試してみました** NoMethodError: "未定義メソッド' [] 'for nil:NilClass "** – PreFiXAUT

+0

申し訳ありませんが編集しています - Board.create(title:params [" board "] [ title]]、description:params ["board"] ["description"])、パラメータの注釈を読んでください。セキュリティ上の理由から、バルクパラメータを渡すことができます – DavidC

+0

どちらも動作しません:/ – PreFiXAUT

0

新しいオブジェクトを作成しようとすると、あなたのように文字列ではなく、ハッシュを渡す必要があります。

def create 
    @board = Board.new(board_params) 

    if @board.save 
    redirect_to @board, notice: 'Board was successfully created.' 
    else 
    # render the new page 
    end 
end 

にあなたのコントローラメソッドを交換して、プライベートメソッド

private 

def board_params 
    params.require(:board).permit(:title, :description) 
end 
+0

悲しいことに、悲しいことに** NoMethodError: "未定義のメソッド' [] 'for nil:NilClass "** – PreFiXAUT

+0

@PreFiXAUT paramsはnilのようです。コントローラメソッドの内容を 'render text:params [" board "]'に置き換えて、 'Save Post'をクリックしたときに何が表示されるのか教えてください。 –

+0

「#」だけが出力されます。それだけです。奇妙な側面は、実際にデータがあるかどうかを確認するために直接ショーをレンダリングし、ボードが作成できたが、悲しいことではない。 – PreFiXAUT

関連する問題