Rails 4保存了不寻常的模型

时间:2014-05-26 11:30:26

标签: ruby-on-rails ruby-on-rails-4

我想从表单中获取数据,然后在模型中处理它,然后保存。我没有从表单中保存数据。

我制作了这样的模型:

class NewsParser < ActiveRecord::Base
def initialize a, h
   @queries = a
   @contents = h
end

迁移:

class CreateNewsParsers < ActiveRecord::Migration
  def change
    create_table :news_parsers do |t|
      t.text :contents
      t.text :queries
      t.timestamps
    end
  end
end

我想将它保存到数据库。所以在控制器中我写道:

class NewsParsersController < ApplicationController
  def create
    @news_parser = NewsParser.new([1,2,3], {1 => 3})
    @news_parser.save
  end
private
  def news_parser_params
    params.require(:news_parser).permit(:a, :h)
  end
end

它在保存行上出现下一个错误:

  

未定义的方法`[]&#39;为零:NilClass

如何保存模型?

3 个答案:

答案 0 :(得分:0)

由于您的方法名称为news_parser_params,我猜这行

@my_model = MyModel.new ([1,2,3], {1 => 3})

作为

@my_model = MyModel.new(news_parser_params)应该有效!

<强>更新

现在将此行更改回原始

params.require(:my_model).permit(:a, :h)

params.require(:my_model).permit(:queries, :contents)

答案 1 :(得分:0)

NewsParser模型中添加这两行

serialize :queries, Array
serialize :contents, Hash

news_parser_params方法

中的控制器中
params.require(:news_parser).permit(:contents => {}, :queries => [])

也在这里

@news_parser = NewsParser.new(:queries => [1,2,3], :contents => {1 => 3})

答案 2 :(得分:0)

我明白了。

我做的第一件事就是从模型中删除初始化方法,就像它在第一条消息中一样。

class NewsParser < ActiveRecord::Base
  def initialize a, h
   @queries = a
   @contents = h
  end
end

下一步。在&#34; The Rails 4 Way&#34;中有一个引用,它帮助我保存属性值。

  

...还有一个write_attribute方法,可让您更改属性值。

class Project < ActiveRecord::Base
  # The description for a project cannot be changed to a blank string
  def description=(new_value)
    write_attribute(:description, new_value) unless new_value.blank?
  end
end

所以现在看起来就是这样:

class NewsParser < ActiveRecord::Base
  serialize :queries, Array
  serialize :contents, Hash

  def add_query str
    @queries ||= []
    @queries << CGI.escape(str)
    write_attribute(:queries, @queries)
  end
end

许可证根本不需要。