小编Abd*_*bdo的帖子

使用ActiveRecord获取列名称

有没有办法用ActiveRecord获取实际的列名?

当我使用连接调用find_by_sql或select_all时,如果存在具有相同名称的列,则第一个被覆盖:

select locations.*, s3_images.* from locations left join s3_images on s3_images.imageable_id = locations.id and s3_images.imageable_type = 'Location' limit 1
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,我得到以下内容:

#<Location id: 22, name: ... 
>
Run Code Online (Sandbox Code Playgroud)

其中id是最后一个s3_image的id.select_rows是唯一按预期工作的东西:

Model.connection.select_rows("SELECT id,name FROM users") => [["1","amy"],["2","bob"],["3","cam"]]
Run Code Online (Sandbox Code Playgroud)

我需要获取上面行的字段名称.这篇文章接近我想要的但看起来过时了(fetch_fields似乎不再存在你如何获得ActiveRecord查询结果中的行和列?)

ActiveRecord连接方法创建多个对象.我正在尝试实现相同的结果"包含"将返回但是使用左连接.

我试图返回大量的结果(有时整个表格),这就是为什么包含不适合我的需要.

activerecord ruby-on-rails

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

带有索引的Ruby`very_with_object`

我想这样做a.each_with_objectindex,在比这更好的办法:

a = %w[a b c]
a.each.with_index.each_with_object({}) { |arr, hash|  
  v,i = arr
  puts "i is: #{i}, v is #{v}" 
}

i is: 0, v is a
i is: 1, v is b
i is: 2, v is c
=> {}
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点没有v,i = arr

ruby

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

react-native this.setState无法正常工作

我知道已经存在类似的问题,但那里没有共享代码.

navbarChanged()>如果条件下,我正在做this.setState.这是类型,HomeTabsetState似乎没有工作.

任何线索/指针?

class HomeTab extends React.Component {
  constructor() {
    super()

    this.setState({
      isNavBarHidden: false
    });
  }

  updatePosition(lastPosition) {
  }

  navbarChanged() {
    console.log("received navbar changed event", AppStore.navbarVisible());

    if (AppStore.navbarVisible()) {
      StatusBarIOS.setHidden(false)
      this.setState({ isNavBarHidden: false})
      // this.state.isNavbarHidden is still true here
      this.render();
    }
    else {
      StatusBarIOS.setHidden(true);
      this.setState({ isNavBarHidden: true});
      this.render();
    }
  }

  componentDidMount() {
    AppStore.addNavbarChangeListener( this.navbarChanged.bind(this) );
  }

  componentWillMount() {
    StatusBarIOS.setHidden(false)
    this.setState({ isNavBarHidden: false });
  }
}
Run Code Online (Sandbox Code Playgroud)

这是我的render()代码:

  render() {
    return (
        <NavigatorIOS style={styles.container} …
Run Code Online (Sandbox Code Playgroud)

reactjs react-native

26
推荐指数
2
解决办法
4万
查看次数

为Rails 3.1.1关闭详细的sql/ActiveRecord

虽然SQL/ActiveRecord调用的详细功能在大多数情况下都很有用,但我希望在我进行循环的情况下将其关闭.

有没有办法把它关掉?

irb(main):055:0> City.first
  ?[1m?[35mCity Load (1.0ms)?[0m  SELECT `cities`.* FROM `cities` LIMIT 1
=> #<City id: 1, name: "bla bla", state_id: 1, zip: nil, country_id: nil,
created_at: "2011-03-27 14:11:28", updated_at: "2011-08-16 11:14:36", guid: "5PK
fvvz2Gsi">
Run Code Online (Sandbox Code Playgroud)

ruby activerecord ruby-on-rails ruby-on-rails-3.1

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

从Ruby数组中删除顺序重复项

假设我有以下数组,我想摆脱连续的重复:

arr = [1,1,1,4,4,4,3,3,3,3,5,5,5,1,1,1]
Run Code Online (Sandbox Code Playgroud)

我想得到以下内容:

=> [1,4,3,5,1]
Run Code Online (Sandbox Code Playgroud)

如果有比我的解决方案(或其变体)更简单,更有效的东西,那将是很棒的:

(arr + [nil]).each_cons(2).collect { |i| i[0] != i[1] ? i[0] : nil }.compact
Run Code Online (Sandbox Code Playgroud)

要么

(arr + [nil]).each_cons(2).each_with_object([]) { 
   |i, memo| memo << i[0] unless i[0] == i[1] 
 }
Run Code Online (Sandbox Code Playgroud)

编辑: 看起来@ ArupRakshit的解决方案非常简单.我仍然在寻找比我的解决方案更高的效率.

编辑:

我会在回复时对响应进行基准测试:

require 'fruity'
arr = 10000.times.collect { [rand(5)] * (rand(4) + 2) }.flatten

compare do
  abdo { (arr + [nil]).each_cons(2).collect { 
    |i| i[0] != i[1] ? i[0] : nil }.compact 
  }
  abdo2 { 
          (arr + [nil]).each_cons(2).each_with_object([]) { 
           |i, memo| memo …
Run Code Online (Sandbox Code Playgroud)

ruby

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

ActionMailer不在文本邮件程序中显示空格

我有一个应该发送此文件的ActionMailer控制器:

/user_mailer/welcome_email.text.erb
Run Code Online (Sandbox Code Playgroud)

这是文件的(示例)内容:

Welcome to znood.com, <%= @user.name %>

You have successfully signed up to znood.com,
Your username is: <%= @user.email %>.

To login to the site, just follow this link: <%= @url %>.

Thanks for joining and have a great day!

The Znood Team
Run Code Online (Sandbox Code Playgroud)

[编辑]这是控制器中的代码:

def sendmail
        @user = User.first
        UserMailer.welcome_email(@user).deliver
        render "user_mailer/welcome_email.text"
        #render the file to see what we're supposed to send
end
Run Code Online (Sandbox Code Playgroud)

这是UserMailer <ActionMailer :: Base中的代码

 def welcome_email(user)
    @user = user
    @url  = "http://znood.com/"
    mail(:to => user.email, …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails actionmailer ruby-on-rails-3 ruby-on-rails-3.1

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

为什么默认情况下Ruby(2.0 +)中的枚举器不是懒惰的?

为什么Ruby 默认情况下Enumerator不像Enumerator::Lazy

有人想要使用非懒惰的情况Enumerator吗?

编辑:

对下面的向后兼容性答案的评论,解释了为什么我还不相信:

假设我们已经将这些"突破"更改添加到Ruby 2.0.0,这是一个主要版本,您将在进行切换之前彻底测试您的代码(特别是如果您要进行生产),不是吗?

编辑#2

我怀疑它与效率有关(让我知道是否有什么问题),所以我做了以下基准测试:(当然有些地方懒惰更好.这是为了证明,为什么Ruby不使用lazy all时间?)

require 'fruity'
require 'prime'

compare do
  lazy { 
    g = Prime::EratosthenesGenerator.new; 1000.times { g.lazy.take(100).to_a } 
  }
  diligent { 
    g = Prime::EratosthenesGenerator.new; 1000.times { g.take(100).to_a } 
  }
end
Run Code Online (Sandbox Code Playgroud)

我得到以下内容:(可能是因为调用.lazy方法而不是Enumerator::Lazy从头开始使用?)

diligent is faster than lazy by 19.999999999999996% ± 1.0%
Run Code Online (Sandbox Code Playgroud)

ruby ruby-2.0

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

重新加载rails初始化程序

在application.rb中,我有

config.autoload_paths += %W(#{config.root}/lib 
Run Code Online (Sandbox Code Playgroud)

因此,当我在lib下修改一个类时,我的代码被重新加载.

但是,当我尝试将配置/初始化器添加到自动加载时,我注意到我的代码没有更新.

如果我正在为字符串类编写扩展名,每次修改代码时都必须重新启动rails.

请指教?

ruby-on-rails ruby-on-rails-3

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

以编程方式将视图渲染为字符串

我想获取一个视图将在字符串中生成的html代码,在我的控制器中修改它,然后将其添加到我的JsonResult.

我发现代码可以完成我所说的部分内容.我想从aspx View中做到这一点.

- 额外说明:

假设我有一个页面Frame.aspx/Controller/Frame将返回

我希望在它出来之前得到响应,所以我可以用jsonp包装它.我不希望每次都在代码中编辑返回结果,这就是我想以编程方式加载视图的原因.

/ Controller/Frame当前返回Frame.aspx的内容: <html><body>hello</body></html>

假设有一个函数可以在字符串生成器中呈现视图

StringBuilder sb = new StringBuilder();
RenderView(sb, "Frame");
Run Code Online (Sandbox Code Playgroud)

现在拿sb并用jsonp包装它:

public JsonResult Frame(string callback)
{
     StringBuilder sb = new StringBuilder();
     RenderView(sb, "Frame");

     return new JsonResult
     {
         Data = "(function() { " + callback + "(" +  clientResponse + "); })();"
         ,
         JsonRequestBehavior = JsonRequestBehavior.AllowGet
     };
}
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-mvc asp.net-mvc-2

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

Chrome将jpg资源解释为文档

请考虑以下图片:http: //znood.com/images/801/130x130.jpg

我有一个控制器渲染此图像并使用image / jpeg MIME进行传输。

Chrome发出警告:

资源被解释为文档,但以MIME类型image / jpeg传输。

为什么将图片解释为文档,为什么Chrome会发出这样的警告?

google-chrome image mime-types

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