我正在开发一个简单的 web 应用程序,您可以在其中导入 CSV 并使用 Sunspot 搜索它。用户使用的唯一操作是索引和显示。所有这些都运行良好,但最终目标是能够准确跟踪正在搜索的内容并将其导出。
我的datasheets
模型是用于上传 CSV 的模型。同样,包括搜索在内的工作正常。两者datasheets
和datalog
默认情况下都是脚手架和路由的。第一次尝试时我想我只需在我的定义中添加一个定义,该定义将使用搜索DatasheetsController
创建模型的新实例。datalog
datasheets_controller.rb(工作正常)
def index
@search = Datasheet.search do
fulltext params[:search]
end
@datasheets = @search.results
respond_to do |format|
...
end
end
这是我创建新数据记录的尝试。我是 Rails 的新手,意识到这不是 RESTful,但我可以在这里使用快速而肮脏的解决方案。
class DatasheetsController < ApplicationController
after_filter :log_it
def log_it
@datalog = Datalog.new(params[:datalog])
end
end
这对 development.log 没有任何帮助,因此我尝试将参数更改为@datalog = Datalog.new(params[:search])
但它给了我以下错误:
NoMethodError in DatasheetsController#index
undefined method `stringify_keys` for "[whatever is searched for]":string
我确定我离这里很远,但我认为这很容易投入,但事实并非如此。如果它有帮助,一旦它起作用,我想让创建的datalog
属性:name
与搜索的字符串相同。任何朝着正确方向的观点(或者因为做得不好而受到批评)都会非常感激。
编辑:我还想补充一点,如果有一种简单的方法来记录搜索结果(它不必在模型中),任何东西都是受欢迎的(包括宝石)。我在 Google 和 SO 上搜索了尽可能多的关键字变体,但一无所获。
编辑2:
在编辑了一些东西之后,我已经接近了,但我仍然遇到问题。
我已将以下内容添加到def index
:
@logkey = :search
并将log_it
定义更改为:
def log_it
@datalog = Datalog.new(params[:id])
@datalog.update_attribute(:name, @logkey)
end
现在一个新的 Datalog 将节省搜索,这很棒,但:name
属性总是以“搜索”结尾。
我现在有一个用于数据记录的示例表是:
姓名
搜索显示编辑销毁
搜索显示编辑销毁
搜索显示编辑销毁
搜索显示编辑销毁
搜索显示编辑销毁
新数据记录
我尝试将@logkey
行更改为:@logkey = :search.to_s
但它并没有真正影响任何事情。
编辑以回应答案
SQL (0.5ms) INSERT INTO "datalogs" ("created_at", "name", "updated_at") VALUES (?, ?, ?, ?) [["created_at", Tue, 26 Feb 2013 18:26:04 UTC +00:00], ["name", nil], ["updated_at", 2013 年 2 月 26 日星期二 18:26:04 UTC +00:00]]
同样,如果这只是其他地方的问题,我会得到它,我可以在自己的时间寻找它。再次感谢!