has_many
有一个关于and的快速问题belongs to
。我处于 a:user has_many :accounts
和a 的情况:account belongs_to the user
。
在我的控制器中,我首先分配@accounts = current_user.accounts
. 调试 [正确] 向我报告此特定用途有 2 个帐户。在下一行中,我保存了一个无效帐户(调试也正确地告诉我它是无效的)。但是,当我检查current_user.accounts.count
vs current_user.accounts.all.count
vs时current_user.accounts.all(order: 'created_at DESC')
,我得到以下值:
- current_user.accounts.count = 2
- current_user.accounts.all.count = 3
- current_user.accounts.all(order: 'created_at DESC') = 2
检查数据库确认无效模型确实没有被保存。
此外,在我提供的动态 ajax 重新加载视图中@accounts = current_user.accounts
(在 if-else 循环检查if @account.save
工作后设置),它循环显示 3 个帐户,包括无效帐户。
这是控制器的代码:
def create
@account = current_user.accounts.new(account_params)
if @account.save
@accounts = current_user.accounts.all(order: 'created_at DESC')
#redirect_to accounts_path, :success => "Account successfully created."
flash[:success] = "Account sucessfully created."
# respond_to :js
respond_to do |format|
format.js {
render :create
}
end
else
@accounts = current_user.accounts.all(order: 'created_at DESC')
flash[:error] = "There was a problem with adding your account."
respond_to do |format|
format.js {
render :create
}
end
end
puts "Final Accounts is #{@accounts.count} compared to #{current_user.accounts.all.count} compared to #{current_user.accounts.count}" # outputs 2, 3, and 2 for an invalid model being saved
end
有人可以向我解释我应该这样做的正确方式吗?或者更好的是,Rails 引擎下发生了什么?我为遇到这个问题而感到羞怯。
我如何告诉 rails 只加载current_user.accounts
保存在数据库中的那些?这与急切加载有关吗?
我在 Rails 4 上运行,如果这有所作为,则使用 postgresql。