小编And*_*vey的帖子

如何启用:pg_search多搜索的tsearch词典?

我正在将pg_search添加到Rails应用程序中.我正在按照github上的说明和这个railscast,但我遇到了一个问题.

我正在建立一个多模型搜索,我有一个基本的实现工作.但是我想扩展pg_seach来使用它的英文字典.

我已经有了一个初始化程序:

PgSearch.multisearch_options = {
  :using => [:tsearch,:trigram],
  :ignoring => :accents
}
Run Code Online (Sandbox Code Playgroud)

所以,从我读过的内容来看,添加词典就像是一样简单

PgSearch.multisearch_options = {
  :using => [:tsearch => [:dictionary => "english"],:trigram],
  :ignoring => :accents
}
Run Code Online (Sandbox Code Playgroud)

但是,当我启动我的服务器

...config/initializers/pg_search.rb:2: syntax error, unexpected ']', expecting tASSOC (SyntaxError)
  :using => [:tsearch => [:dictionary => "english"],:trigram],
Run Code Online (Sandbox Code Playgroud)

我已经尝试交换方括号和大括号,以及我能想到的所有其他语法排列,但没有运气.

这里的语法是什么?为什么我的尝试没有效果,因为我遵循了范围搜索的语法?

ruby-on-rails pg-search

4
推荐指数
1
解决办法
1329
查看次数

如何在Devise登录后返回上一页

通过Devise成功登录后,如何将用户重定向回他们所在的页面?

我已经阅读和搜索了很多,我明白我需要定义after_sign_in_path_for.我已经完成了这个并且它正常工作,我遇到的问题是理解上一页的存储方式,以及如何正确调用它.

我在会话控制器中有这个:

def after_sign_in_path_for(resource)
    return request.env['omniauth.origin'] || session[:user_return_to] || root_path
end
Run Code Online (Sandbox Code Playgroud)

我也试过了

...
return request.env['omniauth.origin'] || stored_location_for(resource) || root_path
...
Run Code Online (Sandbox Code Playgroud)

我不认为我理解如何存储位置,因为如果用户单击登录,则会将用户重定向回根路径.

登录可以通过两种方式启动.(a)用户尝试访问受限制的视图(即before_filter :authenticate_user!...,在这种情况下,他们被重定向并提示登录.或者(b)用户单击登录链接,如果用户未登录则在每个页面上可用.

(a)似乎有效.(b)不是.我想我需要在用户点击登录链接时将当前位置存储到会话.

我该怎么做呢?或者,哪里有一个很好的信息来源,可以帮助我理解这一点.

谢谢!

ruby-on-rails devise

4
推荐指数
1
解决办法
6685
查看次数

如何按时间顺序对合并的数组和哈希进行排序?

在Rails 3.2应用程序中,我有一个多态ActivtyFeed模型.

class ActivityFeed
  belongs_to :user
  belongs_to :feedable, polymorphic: true
end
Run Code Online (Sandbox Code Playgroud)

我需要在ActivityFeed索引视图中聚合一些项目.例如,我不想为每张照片渲染单独的项目,而是按照日期或事件对照片进行分组,并显示"用户上传的x张照片".

我的控制器看起来像这样:

@feed_items = @user.activity_feeds.sort_by(&:created_at)
@feed_array = []
photos = @feed_items.find_all{|f|f.feedable_type.eql?("Photo")}
@feed_items.delete_if{|f|f.feedable_type.eql?("Photo")}
@feed_array << @feed_items
grouped_photos = photos.group_by{|p| p.feedable.event_id}
@feed_array << grouped_photos
@feed_array.flatten!
Run Code Online (Sandbox Code Playgroud)

然后在我正在使用的视图中

if feed_array.class.eql?(Hash)
  render grouped photo partial
elsif feed_array.feedable_type.eql?("Post")
  render single post partial
etc
Run Code Online (Sandbox Code Playgroud)

我在按时间顺序排序项目时遇到问题,因为该数组包含嵌套哈希.

[#<ActivityFeed id: 7, user_id: 2, feedable_type: "Post", feedable_id: 3>, {2=>[#<ActivityFeed id 3, user_id: 4, feedable_type: "Photo", feedable_id: 6>]}]
Run Code Online (Sandbox Code Playgroud)

我该如何排序这个数组?

我试过@feed_array.sort{|a,b| a.['created_at'] <=> b.['created_at'] }但得到了comparison of ActivityFeed with Hash …

ruby-on-rails

4
推荐指数
1
解决办法
486
查看次数

如何以嵌套的形式获取子项的索引

在Rails 3.2应用程序中,我使用简单表单来创建复杂的表单.

表单/模型accepts_nested_attributes_for,我需要获取子对象的索引.

型号:

class Project
  has_many :tasks
  accepts_nested_attributes_for :tasks
end

class Task
  belongs_to :project
end
Run Code Online (Sandbox Code Playgroud)

表格

<%= simple_form_for @project do |f| %>
  <%= f.simple_fields_for :tasks do |builder| %>
    ## I need to get the index of each object built via builder
  <% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

我如何正确获取索引?

ruby-on-rails nested-attributes simple-form

4
推荐指数
1
解决办法
3902
查看次数

为什么 elasticserach-rails 突然提高 Faraday::ConnectionFailed(执行过期)?

我通过 elasticsearch-model 和 elasticsearch-rails gems 在 Rails 应用程序中使用 Elasticsearch。

以前一切正常,但经过一些更新后,每当我尝试与远程集群(AWS Elasticsearch)交互时,我都会收到连接失败错误。

> MyModel.__elasticsearch__.create_index! force: true
=> Faraday::ConnectionFailed (execution expired)
Run Code Online (Sandbox Code Playgroud)

我正在努力找出导致此连接错误的原因。在搜索类似问题后,我调整了超时并尝试了 http、https 和裸 URL 的各种组合,但没有成功。

调试此连接错误的明智方法是什么?

我的 Elasticsearch 是这样初始化的。

#initializers/elasticsearch.rb


require 'faraday_middleware'
require 'faraday_middleware/aws_sigv4'

credentials = Aws::Credentials.new(
  ENV.fetch('AWS_ACCESS_KEY_ID'),
  ENV.fetch('AWS_SECRET_ACCESS_KEY')
)

config = {
  url: ENV.fetch('AWS_ELASTICSEARCH_URL'),
  retry_on_failure: true,
  transport_options: {
    request: { timeout: 10 }
  }
}


client = Elasticsearch::Client.new( config ) do |f|
  f.request :aws_sigv4, credentials: credentials, service: 'es', region: ENV.fetch('AWS_ELASTICSEARCH_REGION')
end


Elasticsearch::Model.client = client
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails elasticsearch

4
推荐指数
1
解决办法
2083
查看次数

如何重置bundler路径

我成功打破了捆绑!我在Rails应用程序中乱搞,我做了类似的事情 bundle install string.现在我的所有宝石都被安装到应用程序中名为"string"的文件夹中.

如何重置bundler以使用我的rvm gemsets的默认路径?

这里的另一篇帖子建议使用bundle install --system,但是这会确保宝石安装到宝石中吗?

我已经检查过rvm info,GEM_HOME和GEM_PATH似乎指向正确的rvm/gemset目录.所以我很困惑为什么没有将宝石安装到正确的位置.

对不起,如果这是一个基本问题,我仍然试图了解这一切是如何工作的.谢谢你的任何指示.

ruby ruby-on-rails bundler

3
推荐指数
1
解决办法
1690
查看次数

如何检索序列化数据?

在Rails 3.2应用程序中,我有一个带有文本列的模型:data.在模型中我有:

class Model
  serialize :data, Hash
end
Run Code Online (Sandbox Code Playgroud)

这是以格式正确存储数据data:{"attr1"=>"foo", "attr2"=>"bar"....}.

如果我想在show视图中显示它,我可以做<%= @model.data %>,并呈现整个哈希.

但是如果我只需要渲染一个特定属性呢?这可能吗?

我尝试过几种似乎可以工作的方法:

<%= @model.data.attr1 %>- 生成undefined method 'attr1' <%- @model.data[:attr1] %>- 不显示任何内容

我错过了什么吗?.谢谢你的任何指示

serialization ruby-on-rails

3
推荐指数
1
解决办法
1357
查看次数

验证失败并且表单重定向回自身后,为什么实例变量为空?

在Rails 3.2应用程序中,当某个表单无法保存(验证失败)并重定向回到表单时,我收到一个错误:

undefined method `map' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)

直接导航到新路径或编辑路径时,此表单不显示任何错误.

该错误来自具有自定义options_from_collection_for_select方法的选择字段.

<%= f.select(:user_ids, options_from_collection_for_select_with_attributes(@users, :id, :name, 'data-attributes', :attributes ), {include_blank:true}, {multiple:true}) %>
Run Code Online (Sandbox Code Playgroud)

如果我用实例变量替换@users,User.all那么重定向后我不会收到错误.

我想@users在重定向后是空的,因此错误.但为什么?@users在新的和编辑控制器中定义.

我的控制器是:

def create
  --bunch of stuff
  if @model.save
    --bunch of stuff
    respond_to do |format|
      format.html { render :text => model_url(@model) }
      format.html { redirect_to(@model, :notice => 'Success!.') }
      format.xml  { render :xml => @model, :status => :created, :location => @model }
    end

  else
    respond_to do |format|
      format.html { …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails

3
推荐指数
1
解决办法
4488
查看次数

如何在Rails 3.2中向原子提要添加图像?

在Rails 3.2应用程序中,我有一个带有:caption字段的Photo模型,并使用Carrierwave来处理图像文件.

我正在尝试创建包含图像的原子提要.这样做的正确方法是什么?

目前我有

#views/photos/index.atom.builder
atom_feed do |feed|
  feed.title "Photos"
  @photos.each do |photo|
      feed.entry photo do |entry|
        entry.title photo.title
        entry.summary photo.caption
        entry.image image_path(photo.file.url(:large))
        entry.author do |author|
          author.name photo.user.name
        end
      end
    end
end
Run Code Online (Sandbox Code Playgroud)

虽然这确实在feed标记中添加了图像标记,但我认为这可能不是正确的语法?

<entry>
   ...
   <image>http://path/to/image.jpg</image> 
   ...
</entry>
Run Code Online (Sandbox Code Playgroud)

还有我见过以下语法的地方

<entry>
    <content type="image/jpg" src="/path/to/image.png" />
</entry>
Run Code Online (Sandbox Code Playgroud)

如果有更多知识的人能告诉我,我会很感激:

  1. 将图像合并到原子进给中的正确标记是什么?
  2. 如何通过Rails中的atom/xml构建器生成该标记?

rss ruby-on-rails atom-feed

3
推荐指数
1
解决办法
3655
查看次数

如何在测试环境中通过 URL 访问 ActiveStorage 对象?

给定具有 ActiveStorage 附件的模型

class MyObject
  has_one_attached :avatar
end
Run Code Online (Sandbox Code Playgroud)

在开发环境中,我能够将头像检索为 StringIO 对象。

obj = MyObject.new( { valid params } )
file = File.open( Rails.root.join( "spec/support/images/test_image.jpg" ))
obj.avatar.attach( io: file, filename: "test_image.jpg" )
obj.save

version = obj.avatar.variant( resize: '200x200>').processed
version_url = Rails.application.routes.url_helpers.url_for( version )
download = open(version_url)
download.class 
=> StringIO
Run Code Online (Sandbox Code Playgroud)

当我尝试在测试环境中做同样的思考时,open(version_url)返回

Errno::ECONNREFUSED Exception: Failed to open TCP connection to localhost:3000 (Connection refused - connect(2) for "localhost" port 3000)
Run Code Online (Sandbox Code Playgroud)

有没有人在测试中成功下载过 activestorage 附件?我应该如何配置测试环境来实现这一点?

我的测试环境已经有了

config.active_storage.service = :test
Rails.application.routes.default_url_options = {host: "localhost:3000"}
Run Code Online (Sandbox Code Playgroud)

我忽略了什么? …

ruby-on-rails rails-activestorage

3
推荐指数
1
解决办法
2352
查看次数