2016-08-13 82 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)”。所以我想我会简单地创建它自己,并使用保存的方法来保存到数据库中,但没有工作之一:

@board = Board.new(params["board"]["title"], params["board"]["description"]) 
@board.save! 

这给了我NoMethodError“未定义的方法`reverse_merge !为零:NilClass“

我现在试着分配调试,但无法弄清楚。不是,它不是零,即使它说它使用NilClass。

编辑:表单代码(视图)

<%= 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 %> 

我真的不知道发生了什么事情,希望有人能提供帮助。在此先感谢 - 前缀/多米尼克

+0

请把你的表单代码。 –

回答

0

而不是

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

尝试

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

你应该能够做到这一点太

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

但出于安全原因,不会工作 http://api.rubyonrails.org/classes/ActionController/Parameters.html

+0

已经尝试过,并给出** NoMethodError:“未定义的方法'[]'为零:NilClass”** – PreFiXAUT

+0

抱歉只是编辑 - 你可以尝试Board.create(title:params [“board”] [标题“],说明: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: “未定义的方法'[]'为零:NilClass”** – PreFiXAUT

+0

@PreFiXAUT它看起来像参数是零。你可以将你的控制器方法的内容替换为'render text:params [“board”]'并告诉我当你点击'Save Post'时显示的是什么? –

+0

它只输出sinlge'#',就这些。奇怪的是,我直接表演了节目,看看是否有实际的数据,并且我能够创建一个电路板,但不能悲伤地挽救它。 – PreFiXAUT