小编Tom*_*iło的帖子

Rails模型中的多个counter_cache

我正在学习Rails,并遇到了一个小问题.我正在使用任务列表编写死的简单应用程序,因此模型看起来像这样:

class List < ActiveRecord::Base
  has_many :tasks
  has_many :undone_tasks, :class_name => 'Task',
                          :foreign_key => 'task_id',
                          :conditions => 'done = false'
  # ... some validations
end
Run Code Online (Sandbox Code Playgroud)

List模型表有列tasks_counterundone_tasks_counter.

class Task < ActiveRecord::Base
  belongs_to :list, :counter_cache => true
  # .. some validations
end
Run Code Online (Sandbox Code Playgroud)

有了这样的代码存在attr_readonly :tasks_counterList情况下,但我想有未完成的任务计数器为好.是否有任何方法让Rails自动缓存多个计数器.

到目前为止,我已经设法创建TasksObserver了增量或减量Task#undone_tasks_counter,但也许有一种更简单的方法.

ruby-on-rails

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

使用belongs_to关联将隐藏字段放入资源的表单中的任何方式

我正在通过编写简单的TODO任务应用程序来学习Rails.两种型号是:

class List < ActiveRecord::Base
  has_many :tasks, :dependent => :destroy
  # ...
end

class Task < ActiveRecord::Base
  belongs_to :list
  # ...
end
Run Code Online (Sandbox Code Playgroud)

任务在列表下作为嵌套资源进行路由.因此,当用户创建新任务时,会POST向其发送消息/lists/:list_id/tasks.到目前为止,在Tasks#new视图的形式中存在

f.hidden_field :list_id, :value => params[:list_id]
Run Code Online (Sandbox Code Playgroud)

但这是一个可怕的解决方案,因为任何人都可以改变隐藏领域的价值.

这里的约定是什么?我应该把类似的东西

@task.list_id = params[:list_id]
Run Code Online (Sandbox Code Playgroud)

Tasks#create行动和摆脱隐藏的领域,或许

@task = List.find(params[:list_id]).tasks.new(params[:task])
if @task.save
  # ...
end
Run Code Online (Sandbox Code Playgroud)

或者甚至有更好的方式我不知道?

编辑:
是的,有类似的问题,其答案几乎涵盖了我的问题.如果您有不同的请发布.

ruby-on-rails

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

Kotlin的枚举类'value属性中的@JsonValue注释

我无法@JsonValue在枚举类的值参数上应用Jackson的注释:

enum class CancellationReason(@JsonValue val code: String) {
    CUSTOMER_RESIGNED("20"),
    ERRORS_IN_FOO("21"),
    ERRORS_IN_BAR("24");
}
Run Code Online (Sandbox Code Playgroud)

错误消息指出:This annotation in not applicable to target 'value parameter'.有什么问题?

jackson kotlin

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

标签 统计

ruby-on-rails ×2

jackson ×1

kotlin ×1