在同一视图中处理模型要求?

时间:2013-03-30 18:27:55

标签: ruby-on-rails ruby nested-forms

首先,感谢您花时间阅读并回答我的问题。我真的很感激。

我不是在寻找如何实现以下内容的确切代码,而是我应该遵循的更多方向或路径。

登录的用户可以创建不同的课程。我已经为每门课程添加了一个要求(一个提供者),我希望用户在这之前至少有一个提供者关联(使用rolify),但我希望这个是相同的视图(课程) #NEW)

我尝试了以下内容:

  • 嵌套表单(由于我在创建课程时至少需要一个提供程序,因此不起作用)
  • 在页面上的模式中添加提供程序#new(无法使用form_form(@provier)从另一个控制器调用控制器

我想到了以下几点:

  • 如果用户尚未创建第一个
  • ,则将用户重定向到提供商#new
  • 添加一个带有form_tag元素的模式,用于创建提供程序,然后刷新基础页面。

你有什么想法?更好的想法?

谢谢! 弗朗西斯

我的课程#new(_form)view

<%= simple_form_for(@course) do |f| %>
  <%= f.error_notification %>
    <%= f.input :name %>
    <%= f.input :description, as: :text, input_html: { rows: '2' } %>
    <%= f.association :provider, :value_method => :id, collection:      Provider.with_role(:provider_admin, current_user), input_html: { class: 'input-large' },   include_blank: false %>
  <div class="form-actions">
    <%= f.button :submit, :class => 'btn-primary' %>
    <%= link_to "Cancel", :back, class: 'btn' %>
  </div>
<% end %>

模型/ provider.rb

class Provider < ActiveRecord::Base
  attr_accessible :description, :name
  validates :name, :presence => true
  validates :description, :presence => true
  validates :name, :length => { :minimum => 6, :maximum => 100 }
  validates :description, :length => { :minimum => 6, :maximum => 100 }
  has_many :courses

end

模型/ course.rb

class Course < ActiveRecord::Base

  attr_accessible :description, :name, :provider_id
  validates :name, :presence => true
  validates :name, :length => { :minimum => 6, :maximum => 100 }
  validates :description, :presence => true
  validates :description, :length => { :minimum => 6, :maximum => 256 }
  validates :provider_id, :presence => true

  belongs_to :provider
  has_many :sessions, :dependent => :destroy

end

1 个答案:

答案 0 :(得分:1)

我喜欢在courses#new时在providers#new!current_user.provider.any?进行重定向的想法。

但我可能会采用嵌套的形式。如果用户没有提供者,您可以使用一个表单创建新课程和新提供者。看看http://railscasts.com/episodes/196-nested-model-form-revised,快速了解一下。我认为这将是最好的用户界面。