作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有任务和用户。当用户完成一项任务时,我会创建一个 Completion,其中有一个字段供用户指示他们花费了多长时间。我需要一个表格来显示所有任务的完成状态和 time_spent 属性。提交时,应该更新现有的完成并创建新的完成。如果可能的话,我想在 Formtastic 中执行此操作,但我会对基本的 Rails 3 解决方案感到满意。
class Completion < ActiveRecord::Base
belongs_to :task
belongs_to :user
# attribute time_spent
end
class User < ActiveRecord::Base
has_many :completions
has_many :tasks, :through => :completions
end
class Task < ActiveRecord::Base
belongs_to :milestone
has_many :completions
has_many :users, :through => :completions
end
class Milestone < ActiveRecord::Base
has_many :tasks
has_many :completions, :through => :tasks
end
has_many
完成和
belongs_to
用户?可以使用 ActiveModel
has_many
?
最佳答案
我终于解决了这个问题。一个键是 fields_for 的集合参数.另一种方法是使用现有记录和新记录混合生成集合。
所以在 View 中,类似于:
<%= form_for @user do |f| %>
<table>
<tr><th>Completed</th><th>Time spent</th><th>Task</th></tr>
<%= f.fields_for :completions, available_completions_for_milestone(@user, @milestone) do |cf| %>
<tr>
<td><%= cf.check_box :status, {disabled: cf.object.persisted?}, "done", "unreported" %></td>
<td><%= cf.text_field :time_spent_text %></td>
<td><%= cf.object.task.description %></td>
</tr>
<%= cf.hidden_field :task_id %>
<% end -%>
def available_completions_for_milestone(user, milestone)
user_completions = user.completions.in_milestone(milestone)
available = []
milestone.tasks.each do |t|
c = user_completions.select{|c| c.task_id == t.id}.first
if !c then # make it
c = user.completions.build( task: t )
end
available << c
end
available
end
has_many :completions
accepts_nested_attributes_for :completions, :reject_if => proc { |attrs| attrs['status'] == 'unreported' }
completions_attributes
用户模型上的 attr_accessible。如果您制作
task_ids
然后可以访问
update
将删除被排除在
PUT
之外的补全.
关于ruby-on-rails - 如何显示关联记录子集的表单,其中一些尚不存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4876317/
我需要面对一个架构/设计决策。 我正在开发一个 Cordova/Meteor 应用程序,它具有独特的入门体验。新用户会看到一个向导,引导他们完成填写某些表单的步骤。 向导流程会等到最后一步才能注册用户
我想通过 psql 在空数据库中加载一些 SQL 函数: psql -d my_database -f fuctions.sql --set ON_ERROR_STOP=1 我使用 --set ON_
我是一名优秀的程序员,十分优秀!