我正在尝试在控制器的show动作中构建一个表单。这是我的设置。
类别模型
class Category < ActiveRecord::Base
# Associations
has_many :feeds
has_many :subscriptions
# Nested attributes
accepts_nested_attributes_for :subscriptions
end
订阅模式
class Subscription < ActiveRecord::Base
# Associations
belongs_to :profile
belongs_to :category
belongs_to :feed
end
使用订阅命名空间:
# Subscriptions
namespace :subscriptions do
resources :categories
end
在类别(http://URL.com/subscriptions/categories/1)的show动作中,我想构建订阅模型表单并列出该类别的可用订阅源。我希望表单将已签出的订阅源提交到订阅模型。
CategoriesController
def show
@feeds = Feed.where("category_id = ?", @category)
end
尝试在“类别”视图的“显示”操作中构建表单:
<%= simple_form_for [:subscriptions, @category] do |f| %>
<%= f.association :feeds, collection: @feeds, value_method: :id, as: :check_boxes %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
现在它正在呈现适当的信息,但它呈现为编辑表单,而不是创建表单。我该如何解决这个问题?
我还需要添加哪些路由/控制器来实际获取要保存到订阅模型的信息?
感谢。
答案 0 :(得分:0)
首先我不确定在show action和视图中初始化@category对象的位置。如果你想渲染一个新的页面,它应该映射到控制器的新动作,你的路径将是
http://URL.com/subscriptions/categories/new
您正在使用的路径
http://URL.com/subscriptions/categories/1
将始终根据rails约定映射到show动作,尽管您可以相应地覆盖它,但这不是一个好习惯。也可以在新操作中按
初始化实例@category = Category.new
现在提交它将自动转到创建操作。如果你的@category已经存在于数据库中,例如
@category = Category.find(1)
现在,如果此对象转到simple_form_for,它将发送数据以进行更新操作。