在这个Rails应用程序中,用户可以编写故事并将其添加到集合中。当他们编写故事时,用户可以将其添加到现有集合中,或者通过模态在stories / new.html.erb视图中创建新集合。
目前看起来像
的routes.rb
<%= form_for Collection.new do |f| %>
new.html.erb
class CollectionsController < ApplicationController
def new
@user = current_user # or however
@collection = Collection.new
end
def show
@collection = Collection.friendly.find(params[:id])
end
def create
@collection = current_user.collections.build(collection_params)
if @collection.save
render json: @collection
else
render json: {errors: @collection.errors.full_messages}
end
end
private
def collection_params
params.require(:collection).permit(:name, :description)
end
end
集合控制器
class StoriesController < ApplicationController
def new
@story = Story.new
authorize @story
end
end
故事控制器
resources :users do
resources :collections
现在我想嵌套路由,使集合属于用户
<%= form_for Collection.new do |f| %>
但是,这会导致此行出错
# Outputs a copy of "common.js" file with new name, but does not uglify or mangle
$uglify $CK_OUTPUT_PATH \
-o $CK_PROJECT_ROOT/js/common.min.js -c –m
# Same thing, outputs only a copy with new name
$CK_OUTPUT_PATH uglifyjs --compress --mangle --output $CK_PROJECT_ROOT/js/common.min.js
它不再有效。怎么解决这个问题?感谢。
答案 0 :(得分:0)
嵌套资源后,收集路由已更改
如果路线较早
/collections/24
现在变成了
/users/1/collections/24
所以你必须改变form_for方法。您需要添加嵌套的资源,在这种情况下应该是
<%= form_for [@user,@collection] do |f| %>
#your code here
<% end %>
此外,您还必须为两个模型添加关联,即用户has_many :collections
和收藏belongs_to :user
在您的控制器中,必须先实例化第一个用户,然后创建集合:
@user = current_user #The parameter can be named anything
@collection = Collection.new
答案 1 :(得分:0)
您需要告诉表单对象有关新路由架构的信息。
也不要将Model.new
直接写入您的表单。
当嵌套这样的路线时,我们会对用户和集合做出假设,即用户已经存在。
您应该在new
操作中实例化您的资源(现有用户和新收藏集)。
def new
@user = User.find(params[:user_id]) # since nested
@collection = Collection.new
end
<% form_for [@user, @collection] do |f| %>
<% end %>