【发布时间】:2013-02-27 02:36:25
【问题描述】:
我正在开发一个简单的 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", 2013 年 2 月 26 日星期二 18:26 :04 UTC +00:00], ["name", nil], ["updated_at", 2013 年 2 月 26 日星期二 18:26:04 UTC +00:00]]
同样,如果这只是其他地方的问题,我会得到它,我可以在自己的时间寻找它。再次感谢!
【问题讨论】:
-
@logkey = params[:search].to_s但是请参阅下面的答案。
标签: ruby-on-rails ruby forms sunspot