我的应用程序有我要关联的类别和应用程序模型
类别=> has_many:apps, App => belongs_to:category
我在创建和更新应用模型时能够选择类别的用户是成功完成的tutorial i use。
问题是当用户创建应用模型忘记传递应用程序崩溃的任何类别时(我不知道如何处理这个)
同样,当用户创建传递类别的应用模型时,则决定稍后进行编辑。 。类别字段不会指向最后选择的类别(显示提示"选择类别"),当用户选择不更新类别字段时会发生同样的错误!
我的表格部分
<%= simple_form_for @app do |f| %>
<%= select_tag(:category_id, options_for_select(@categories), {:prompt => "--select category--"}) %>
<%= f.input :title, label: "Application title" %>
<%= f.input :creator %>
<%= f.input :description %>
<%= f.button :submit %>
<% end %>
我的apps_controller
def new
@app = current_user.apps.build
@categories = Category.all.map { |c| [c.name, c.id] }
end
def create
@app = current_user.apps.build(app_params)
@app.category_id = params[:category_id]
if @app.save
redirect_to root_path
else
render :new
end
end
def edit
@categories = Category.all.map { |c| [c.name, c.id] }
end
def update
@app.category_id = params[:category_id]
if @app.update(app_params)
redirect_to @app
else
render :edit
end
end
我做错了什么?我怎样才能准确处理这种情况?
答案 0 :(得分:1)
如果创建和更新失败,请务必初始化@categories。
在创建
if @app.save
redirect_to root_path
else
#initialise @categories
@categories = Category.all.map { |c| [c.name, c.id] }
render :new
end
在更新中
if @app.update(app_params)
redirect_to @app
else
@categories = Category.all.map { |c| [c.name, c.id] }
render :edit
end
答案 1 :(得分:1)
collection_select
select_tag
超出了表单对象的范围修正:
<%= simple_form_for @app do |f| %>
<%= f.collection_select :category_id, @categories, :id, :name %>
<%= f.input :title, label: "Application title" %>
<%= f.input :creator %>
<%= f.input :description %>
<%= f.button :submit %>
<% end %>
您需要删除控制器中的map
:
#app/controllers/apps_controller.rb
class AppsController < ApplicationController
def new
@app = current_user.apps.new
@categories = Category.all
end
end
这假设您的category_id
表
apps
列