【发布时间】:2013-11-24 21:54:29
【问题描述】:
在我的 Rails 应用程序中,我有步骤和问题。用户可以为任何步骤生成问题。
Step.rb
class Step < ActiveRecord::Base
has_one :question, :dependent => :destroy
accepts_nested_attributes_for :question, :allow_destroy => :true
end
Question.rb
class Question < ActiveRecord::Base
belongs_to :step
end
我使用嵌套表单生成问题:
<%= semantic_form_for [@project,@step] do |f| %>
<%= f.fields_for :question do |question_f| %>
<%= question_f.text_area :description %>
<% end %>
<% end %>
首先,如果用户实际在问题文本区域中输入文本,我只想创建一个新问题。如何防止步骤表单自动保存一个空问题?这是我当前的步骤控制器:
class StepsController < ApplicationController
def new
@step = @project.steps.build(:parent_id=> params[:parent_id])
@step.build_question
...
end
def create
@step = @project.steps.build(params[:step])
respond_to do |format|
if @step.save
...
end
end
其次,我想在创建新问题时运行一些 ruby 代码。 特别是,我想更新包含该问题的项目的 updated_at 日期。我会将它放在我的控制器中的什么位置?我尝试为 Question 模型创建控制器并创建 create 和 new 方法,但在提交步骤表单时没有调用它们。
【问题讨论】:
标签: ruby-on-rails forms activerecord controller