小编Mat*_*ins的帖子

修改beforeFind回调中所需的可包含字段?

在我的CakePHP 1.2.5应用程序中,我有一个属于Profile模型的User模型.User模型有一个username字段,当find()在Profile模型上执行a 时,我想总是自动检索值User.username.我认为修改我的Profile模型的beforeFind()方法以自动包含所需的字段是有意义的.

这是我试图做的事情:

public function beforeFind($queryData) {
    // determine if the username data was already requested to be included in the return data via 'User.username' or 'User' => array('username').
    $hasUserData  = isset($queryData['contain']) && in_array("User.{$this->User->displayField}", $queryData['contain']);
    $hasUserData |= isset($queryData['contain']['User']) && in_array($this->User->displayField, $queryData['contain']['User']);

    // request the the username data be included if it hasn't already been requested by the calling method
    if (!$hasUserData) {
        $queryData['contain']['User'][] = $this->User->displayField;
    }

    return …
Run Code Online (Sandbox Code Playgroud)

php cakephp behavior callback

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

防止Rails中的N + 1个查询

我已经看到了一些在Rails中:include调用ActiveRecord find方法之一时传递哈希值的例子.但是,我还没有看到任何关于这是否可以通过关系方法的例子.例如,假设我有以下内容:

def User < ActiveRecord::Base
  has_many :user_favorites
  has_many :favorites, :through => :user_favorites
end

def Favorite < ActiveRecord::Base
  has_many :user_favorites
  has_many :users, :through => :user_favorites
end

def UserFavorite < ActiveRecord::Base
  belongs_to :user
  belongs_to :favorite
end
Run Code Online (Sandbox Code Playgroud)

我看到的所有示例都显示如下代码:

User.find(:all, :include => :favorite)
Run Code Online (Sandbox Code Playgroud)

但我没有看到任何关于使用关系的例子.相反,我可以做这样的事情吗?

User.favorites(:include => :user)
Run Code Online (Sandbox Code Playgroud)

entity-relationship ruby-on-rails query-optimization select-n-plus-1

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

Rails急切加载似乎是在查询错误

我正试图在我的Rails 3应用程序中加载.我把它缩小到一个非常基本的样本,而不是生成我期望的一个查询,它产生4.

首先,这是我的模型的简单细分.

class Profile < ActiveRecord::Base
  belongs_to :gender

  def to_param
    self.name
  end
end

class Gender < ActiveRecord::Base
  has_many :profiles, :dependent => :nullify
end
Run Code Online (Sandbox Code Playgroud)

然后我有一个ProfilesController :: show动作,我在那里查询模型.

def ProfilesController < ApplicationController
  before_filter :find_profile, :only => [:show]

  def show
  end

  private

    def find_profile
      @profile = Profile.find_by_username(params[:id], :include => :gender)
      raise ActiveRecord::RecordNotFound, "Page not found" unless @profile
    end
end
Run Code Online (Sandbox Code Playgroud)

当我查看生成的查询时,它显示以下内容:

SELECT `profiles`.* FROM `profiles` WHERE `profiles`.`username` = 'matt' LIMIT 1
SELECT `genders`.* FROM `genders` WHERE (`genders`.`id` = 1)
Run Code Online (Sandbox Code Playgroud)

我期望看到的是一个查询:

SELECT `profiles`.*, `genders`.* …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails query-optimization eager-loading ruby-on-rails-3

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

PostgreSQL"地球距离"模块使用哪些单位?

我猜它使用的单位是米(m),但从我发现的文档中看起来并不清楚.它是否正确?

如果是这样,只是为了验证,为了在英里/米之间进行转换,我假设这些功能应该起作用:

public static function mi2m($mi) {  // miles to meters
    return $mi * 1609.344;
}
public static function m2mi($m) {  // meters to miles
    return $m * 0.000621371192;
}
Run Code Online (Sandbox Code Playgroud)

gis postgresql earthdistance

2
推荐指数
1
解决办法
2650
查看次数

自动将参数附加到*_url或*_path方法(Rails)

我有一组与我的控制器有关的特定视图,我想要任何调用*_path*_url附加一组参数.

是否有一些我可以覆盖的魔术方法让我这样做?我不知道在Rails代码中甚至处理的方法*_path*_url方法.

编辑为清晰起见:我正在寻找一种方法来做到这一点,这样我就不必修改每个需要发生的视图中的每个链接.我不希望每个触及这组视图的编码器都必须记住在他们添加到页面的每个链接上附加一个参数.应自动附加相同的参数.我认为改变*_url*_path称为失败.类似地,必须覆盖每个*_url*_path调用被认为是失败的,因为每当添加/删除新链接时都必须添加/删除新方法.

parameters url ruby-on-rails path

2
推荐指数
2
解决办法
3748
查看次数

我想要哪种Java对象类型(collection/list/set/whatever)?

我想存储一组基于它们所代表的值键入的对象.这些键可以重复.例如:

 [4] => Bob
 [5] => Mary
 [5] => Sue
 [9] => Steve
[10] => Jason
[10] => Michelle
Run Code Online (Sandbox Code Playgroud)

本质上,我想循环遍历这个并查看每个键并说"是否有另一个对象(在这种情况下是人),其键在当前键的1之内?如果是,请匹配它们并从集合中删除它们. " 我将在上面的示例中迭代"1"值,直到集合为空(或者为奇数场景保留一个对象).

我不相信我试图这样做的方式是最好的方式,所以我也愿意接受反馈.

java collections list set key-value

2
推荐指数
2
解决办法
632
查看次数

将参数传递给生成器中的 Rails 3 模板

在 Rails 2 生成器中,可以通过以下方式将数据传递给模板

record.template(
  "src.html.erb",
  "dest.html.erb",
  :assigns => { :id => id, :name => name }
Run Code Online (Sandbox Code Playgroud)

在 Rails 3 中,看起来模板是新方法。不幸的是,它看起来像第三个参数,config,只接受一个:verbose选项。试图通过传递值:assigns似乎不起作用。

有谁知道如何将动态值传递给我的 Rails 3 模板?

templates code-generation generator ruby-on-rails-3

2
推荐指数
1
解决办法
2952
查看次数

通过split()将空字符串转换为nil

我有一个我正在拆分的字符串,如下所示:

foo, bar, baz, etc = str.split(',')
Run Code Online (Sandbox Code Playgroud)

例如,如果str等于"一,二,四",则baz最终等于""(空字符串).有没有简单的方法来循环这些参数,nil如果它们是一个空字符串,将它们转换为?还是我坚持做以下事情?

foo = nil if foo.blank?
bar = nil if bar.blank?
baz = nil if baz.blank?
etc = nil if etc.blank?
Run Code Online (Sandbox Code Playgroud)

ruby string split

2
推荐指数
2
解决办法
936
查看次数

PostgreSQL加入到表之间的最新记录

我有两个关于这个问题的表:conversations有很多messages.基本结构(只有相关列)如下:

conversations (
  int id (PK)
)

create table conversation_participants (
  int id (PK),
  int conversation_id (FK conversations),
  int user_id (FK users),
  unique key on [conversation_id, profile_id]
)

create table messages (
  int id (PK),
  int conversation_id (FK conversations),
  int sender_id (FK users),
  int recipient_id (FK users),
  text body
)
Run Code Online (Sandbox Code Playgroud)

对于每个对话条目,给定user_id我希望收到:

  • 该用户参与的所有对话(即:conversations.*)
  • 接合到最近的匹配消息(即:order by messages.id desc limit 1)
  • 按其最新消息ID排序的对话(即:order by messages.id desc)

不幸的是,我似乎可以找到所有类似于MySQL的查询帮助,这在PostgreSQL中不起作用.我发现最接近的是StackOverflow上的这个答案给出了一个select distinct …

postgresql join left-join

2
推荐指数
1
解决办法
5226
查看次数

如何获得有客户ID的Faye客户?

Faye允许您监控各种事件,例如handshakesubscribe.这些回调块仅提供client_id值而不是客户端本身.例如:

server = Faye::RackAdapter.new(mount: '/faye', timeout: 45)

server.bind(:handshake) do |client_id|
  puts "Received handshake from #{client_id}"
end
Run Code Online (Sandbox Code Playgroud)

如何才能访问客户端client_id?或者如何在握手中访问更多信息,例如请求标头中提供的cookie(如果该信息甚至可用)?

ruby faye

2
推荐指数
1
解决办法
1106
查看次数

在Symfony插件sfDoctrineGuardPlugin中使用自定义表名?

我试图在我的Symfony 1.4项目中使用sfDoctrineGuardPlugin.此插件包含一个schema.yml文件,该文件用于定义所涉及的所有表.表名采用以下形式:sf_guard_user,sf_guard_user_group,sf_guard_user_permission等.我宁愿将这些表命名为:users,user_groups,user_permissions等.有没有办法让我这样做而无需直接编辑插件代码?

authentication plugins symfony1 sfguard symfony-1.4

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

将Rails值设置为多行?

在Rails中,您可以创建一个跨越多行的锚标记,执行如下操作:

<% link_to target_url_path do %>
    <span class="title">Example</span>
    <span class="excerpt">Neque porro quisquam est qui dolorem ipsum...</span>
    <%= image_tag 'example.png', :class => 'thumbnail' %>
<% end >
Run Code Online (Sandbox Code Playgroud)

我想知道如何使用类似的方法设置值.本质上,像:

<% my_variable = do %>
    <span class="title">Example</span>
    <span class="excerpt">Neque porro quisquam est qui dolorem ipsum...</span>
    <%= image_tag 'example.png', :class => 'thumbnail' %>
<% end >
Run Code Online (Sandbox Code Playgroud)

编辑:万一有人好奇为什么我问,这是因为facebox_link_to似乎不允许你使用dolink_to这样的语法.

ruby ruby-on-rails multiline

-1
推荐指数
1
解决办法
372
查看次数