"no implicit conversion of Symbol into String" 尝试创建新记录时

"no implicit conversion of Symbol into String" when trying to create a new record

当我尝试创建新记录时出现错误 no implicit conversion of Symbol into String,我不明白这是因为所有数据都是由字符串组成的。

在我的控制器中:

def new
    @account = Account.new
end

def create
    @account = Account.new(account_params)
    if @account.save
      redirect_to(:action => 'index')
    else
      render('new')
    end
end

private
    def account_params
    params.require(:account).permit(:username, :firstname, :lastname, :organisation, :phonenumber, :avatar, :about, :verified)
end

表格很简单:

<%= form_for(@account) do |f| %>
  <div>
   <%= f.label :username %><br>
   <%= f.text_field :username %>
  </div>
  <div>
   <%= f.label :firstname %><br>
   <%= f.text_field :firstname %>
  </div>
  <div>
   <%= f.label :lastname %><br>
   <%= f.text_field :lastname %>
  </div>
  ... more of the same...

  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

以及迁移文件:

class CreateAccounts < ActiveRecord::Migration
  def change
    create_table :accounts do |t|

      t.string   :username
      t.string   :firstname
      t.string   :lastname
      t.string   :organisation
      ...more of the same, all strings...
    end
  add_index :accounts, :username,                unique: true
  end
end

我正在使用 Rails 3.2 和 Ruby 2.1.5。

我找到了解决方案: 在控制器中我不得不改变

@account = Account.new(account_params)

@account = Account.new(params[:account])

Rails 3.2 不包含强参数。如果你想使用它们,你需要添加 gem 'strong_parameters' 到你的 Gemfile。

这个堆栈溢出答案讨论了必要的步骤。

Strong Parameters in Rails 3.2.8