我想从表单中获取数据,然后在模型中处理它,然后保存。我没有从表单中保存数据。
我制作了这样的模型:
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
如何保存模型?
答案 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
许可证根本不需要。