我想使用人造活動記錄(在db中沒有持久性的模型)。軌道人造活動記錄
我跟着這個例子: https://quickleft.com/blog/using-faux-activerecord-models-in-rails-3/
而且我有這樣的錯誤:
引發ArgumentError在SearchController#新 錯誤的參數數目(2 1)
應用程序/模型/搜索。 rb:32:在assign_attributes' app/models/search.rb:27:in
初始化' app/controllers/search_controller.rb:4:在new' app/controllers/search_controller.rb:4:in
新'
它看到毫秒,當你打電話Search.new它需要參數,但我的目標是使其成爲一個空的搜索對象。
這裏是我的模型,控制器,視圖,路線:
型號
class Search
include ActiveModel::MassAssignmentSecurity
TRUE_VALUES = ActiveRecord::ConnectionAdapters::Column::TRUE_VALUES
attr_accessor :query
attr_reader :safe_search, :results_per_page
alias_method :safe_search?, :safe_search
attr_accessible :query, :safe_search, :results_per_page
RESULTS_PER_PAGE = [10, 25, 50, 100].freeze
include ActiveModel::Conversion
include ActiveModel::Validations
validates :query, presence: true
validates :results_per_page, presence: true, inclusion: { in: RESULTS_PER_PAGE }
def persisted?
false
end
def initialize(attributes = {})
assign_attributes(attributes)
yield(self) if block_given?
end
def assign_attributes(values, options = {})
sanitize_for_mass_assignment(values, options[:as]).each do |k, v|
send("#{k}=", v)
end
end
def results_per_page=(value)
@results_per_page = value.to_i
end
def safe_search=(value)
@safe_search = TRUE_VALUES.include?(value)
end
end
控制器
class SearchController < ApplicationController
def new
@search = Search.new
render "search/new.html.erb"
end
def create
@search = Search.new(params[:search])
# TODO: use the @search object to perform a search. Adding
# a `results` method on the search object might be a good starting point.
end
end
查看:搜索/ new.html.erb
<%= form_for @search do |f| %>
<%= f.label :query %>
<%= f.text_field :query %>
<%= f.label :safe_search %>
<%= f.check_box :safe_search %>
<%= f.label :results_per_page %>
<%= f.select_box :results_per_page %>
<%= end %>
你爲什麼要重寫Rails的'assign_attributes'方法(doc [here](http://apidock.com/rails/ActiveRecord/AttributeAssignment/assign_attributes))?這似乎與你的錯誤有關。 –
嗨史蒂夫,我認爲作者使用它,因爲它不是一個普通的活動記錄對象。 –
我評論了assign_attributes並初始化它,看看它是否工作,現在我從視圖中看到這個錯誤:#<# undefined方法'sear_path':0x007fca6a4229f8> 提取的源代碼(在第1行附近): 1:<%= form_for @search do | f | %> 2: 3:<%= f.label:query%> 4:<%= f.text_field:query%>。我正在使用我正在使用的路線更新我的問題。 –