在这个Rails应用程序中,用户可以编写故事并将其添加到集合中。当他们编写故事时,用户可以将其添加到现有集合中,或者通过模态在stories / new.html.erb视图中创建新集合。
我将此工作用于新操作,但编辑操作已损坏。它会抛出一个错误 表格中的第一个参数在此行中不能包含nil或为空
<%= form_for [@user, @collection] do |f| %>
我的代码看起来像这样
stories_controller.rb
def new
@story = Story.new
authorize @story
@user = current_user
@collection = Collection.new
end
def edit
@story = Story.friendly.find(params[:id])
end
stories / edit.html.erb加载_form.html.erb部分
<div class="modal-body">
<%= form_for [@user, @collection] do |f| %>
<div class="form-group">
<%= f.label :name %>
<%= f.text_field :name, class: "form-control" %>
</div>
<div class="form-group">
<%= f.label :description %>
<%= f.text_area :description, class: "form-control collection-desc-input-box", placeholder: "Give it a description (this is optional)" %>
</div>
<div class="form-group">
<%= f.submit class: "btn btn-lakeside" %>
</div>
<% end %>
</div>
routes.rb嵌套资源
resources :users do
resources :collections
修改
通过在编辑操作中放置Collection.new来解决问题。如果有人可以解释发生了什么,那将会很好。我通过反复试验来解决这个问题。感谢。
def edit
@story = Story.friendly.find(params[:id])
@user = current_user
@collection = Collection.new
end
答案 0 :(得分:0)
在您的编辑操作中初始化/设置@user
和@collection
,它们是零,因此错误。由于它们是针对new
操作初始化的,因此它正在运行。
您可以针对@user
执行以下操作,@collection
可以在相应的操作中进行相应的初始化:
before_action :set_user, only: [:new, :edit]
private
def set_user
@user = current_user
end
答案 1 :(得分:0)
您在商店控制器中错过了@user
和@collection
实例变量。
尝试以下代码:
#stories_controller.rb
def new
@story = Story.new
authorize @story
@user = current_user
@collection = Collection.new
end
def edit
@story = Story.friendly.find(params[:id])
@user = User.find(params[:id])
@collection = Collection.find(params[:collection_id])
end