有没有办法用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连接方法创建多个对象.我正在尝试实现相同的结果"包含"将返回但是使用左连接.
我试图返回大量的结果(有时整个表格),这就是为什么包含不适合我的需要.
我想这样做a.each_with_object有index,在比这更好的办法:
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?
我知道已经存在类似的问题,但那里没有共享代码.
在navbarChanged()>如果条件下,我正在做this.setState.这是类型,HomeTab但setState似乎没有工作.
任何线索/指针?
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) 虽然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) 假设我有以下数组,我想摆脱连续的重复:
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) 我有一个应该发送此文件的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
为什么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) 在application.rb中,我有
config.autoload_paths += %W(#{config.root}/lib
Run Code Online (Sandbox Code Playgroud)
因此,当我在lib下修改一个类时,我的代码被重新加载.
但是,当我尝试将配置/初始化器添加到自动加载时,我注意到我的代码没有更新.
如果我正在为字符串类编写扩展名,每次修改代码时都必须重新启动rails.
请指教?
我想获取一个视图将在字符串中生成的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) 请考虑以下图片:http: //znood.com/images/801/130x130.jpg
我有一个控制器渲染此图像并使用image / jpeg MIME进行传输。
Chrome发出警告:
资源被解释为文档,但以MIME类型image / jpeg传输。
为什么将图片解释为文档,为什么Chrome会发出这样的警告?
ruby ×4
activerecord ×2
actionmailer ×1
asp.net ×1
asp.net-mvc ×1
c# ×1
image ×1
mime-types ×1
react-native ×1
reactjs ×1
ruby-2.0 ×1