我的应用程序中有Post
和User
个实体。
他们相应地拥有belongs_to
和has_many
关系。我使用gem devise
作为用户授权/身份验证系统。
如果Post
有user_id
并且它与current_user.id
相同,则此段代码会选择所有帖子,并将其分配给实例变量:
@post = Post.where(:user_id => current_user.id)
问题是:
我如何选择用户创建的最新帖子(我想我会使用.last
方法来实现这一点)
但问题是我不知道如何在我的实例变量中的一个查询中使用.where
和.last
。
答案 0 :(得分:2)
ActiveRecord where
方法返回ActiveRecord关系对象。这意味着可以将其他AR方法链接到它上面。有几种方法可以做到这一点。
@post = Post.where(user: current_user)
请注意,您可以在不指定ID的情况下传递where
对象。例如,where(user: current_user)
而不是where(user_id: current_user.id)
。 AR计算出你想要做的事情。
您也可以浏览用户。
@post = current_user.posts.last
但要注意last
可能不一定按照你的意愿行事。它默认使用对象id
。这意味着最近更新的帖子可能不会优先。如果您使用软删除,这也可能是一个问题。您可能希望明确地将created_at
或updated_at
添加到条件中。
@post = current_user.posts.order(created_at: :desc).last
您可能希望将其包装在范围内。
class Post
scope :most_recent, -> { order(created_at: :desc).last }
end
@post = current_user.posts.most_recent
答案 1 :(得分:0)
您可以按升序或降序的顺序订购用户创建的帖子,以获取用户的最新帖子,您可以按降序排序。
在您的帖子模型中可以将范围定义为最近
#include <iostream>
using namespace std;
int a[10000000];
long int coin(long int n){
if(n<10000000){
return a[n];
}
else{
return(max(n,coin(n/2)+coin(n/3)+coin(n/4)));
}
}
int main()
{
//cout << "Hello World!" << endl;
long int n,ans;
int i;
a[0]=0;
for(i=1;i<10000000;i++){
a[i]=max(i,a[i/2]+a[i/3]+a[i/4]);
}
while(cin>>n){
if(n<10000000){
cout<<a[n]<<endl;
}
else{
ans=coin(n);
cout<<ans<<endl;
}
}
return 0;
}
答案 2 :(得分:-2)
我已经解决了我的问题。
这对我来说就像一个魅力:
public class func filterDictionaryFromEmptyString(var dictionary:[String: AnyObject]) -> [String: AnyObject]
{
print(dictionary.keys.count)
for key:String in dictionary.keys
{
print(key)
print(dictionary[key]!)
if String(dictionary[key]!) == ""
{
dictionary.removeValueForKey(key)
}
}
print(dictionary.keys.count)
return dictionary
}