使用 Select 框和外键在 Rails 中创建新记录时遇到问题
Trouble creating a new record in Rails with Select Boxes and Foreign Keys
Ruby Rails 这里是新手。
TL;DR:尝试创建新记录时,我收到一条错误消息,指出我的外键必须存在。我在视图中使用 Select 框。需要帮助。
我正在为我们公司自己的支持人员创建一个请求管理系统。到目前为止,我已经为问题和 2 个模型生成了一个脚手架,一个用于类别,另一个用于子类别。
到目前为止,我想出的关系是这样设计的:
问题属于类别和子类别
子类别属于类别。
这意味着用户的键盘可能有问题,为此他将创建一个问题。此问题属于名为 "Peripherals" 的子类别,而该子类别又属于更广泛的 "Hardware" 类别。
我仍然需要实施 Ajax 来为我的 Select 框获取数据,但是在更简单的场景中测试它时,我无法从 "New Issue" 看法。我遇到一条错误消息,指出类别和子类别必须存在。我已经回顾了到目前为止所写的内容,但找不到我的错误。
这是我在问题控制器中创建方法的代码
def create
@issue = Issue.new(issue_params)
respond_to do |format|
if @issue.save
format.html { redirect_to root_path, notice: 'Issue was successfully created.' }
else
@categories = Category.enabled
@subcategories = Subcategory.enabled
format.html { render :new }
end
end
end
这是我的模型
发行模型:
class Issue < ApplicationRecord
belongs_to :category
belongs_to :subcategory
end
类别模型:
class Category < ApplicationRecord
has_many :subcategories
has_many :issues
enum status: { disabled: 0, enabled: 1 }
after_initialize :set_defaults
def self.enabled
where(status: 'enabled')
end
def set_defaults
self.status ||= 1
end
end
子类别模型
class Subcategory < ApplicationRecord
belongs_to :category
has_many :issues
enum status: { disabled: 0, enabled: 1 }
def self.enabled
where(status: 'enabled')
end
after_initialize :set_defaults
def set_defaults
self.status ||= 1
end
end
最后,这里是传递给控制器的参数:
Processing by IssuesController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"tzKDayYfEbEwTaOFup/N9kQ+8tr9c0P5otV2B0boKGrgyv+HkQaEvYJ6ZMQeR+8XgCnhJR6PosVcx0jPJpqBEA==", "category_id"=>"1", "subcategory_id"=>"1", "issue"=>{"description"=>"Replace broken keyboard.", "status"=>"1", "criticality_level"=>"1"}, "commit"=>"Create Issue"}
I was able to create an Issue via Rails Console, though.
任何人都可以告诉我如何解决这个问题吗?谢谢大家!
修改创建动作如下
def create
@category = Category.find(params[:category_id])
@issue = @category.issues.build(issue_params)
respond_to do |format|
if @issue.save
format.html { redirect_to root_path, notice: 'Issue was successfully created.' }
else
@categories = Category.enabled
@subcategories = Subcategory.enabled
format.html { render :new }
end
end
end
Ruby Rails 这里是新手。
TL;DR:尝试创建新记录时,我收到一条错误消息,指出我的外键必须存在。我在视图中使用 Select 框。需要帮助。
我正在为我们公司自己的支持人员创建一个请求管理系统。到目前为止,我已经为问题和 2 个模型生成了一个脚手架,一个用于类别,另一个用于子类别。
到目前为止,我想出的关系是这样设计的:
问题属于类别和子类别 子类别属于类别。
这意味着用户的键盘可能有问题,为此他将创建一个问题。此问题属于名为 "Peripherals" 的子类别,而该子类别又属于更广泛的 "Hardware" 类别。
我仍然需要实施 Ajax 来为我的 Select 框获取数据,但是在更简单的场景中测试它时,我无法从 "New Issue" 看法。我遇到一条错误消息,指出类别和子类别必须存在。我已经回顾了到目前为止所写的内容,但找不到我的错误。
这是我在问题控制器中创建方法的代码
def create
@issue = Issue.new(issue_params)
respond_to do |format|
if @issue.save
format.html { redirect_to root_path, notice: 'Issue was successfully created.' }
else
@categories = Category.enabled
@subcategories = Subcategory.enabled
format.html { render :new }
end
end
end
这是我的模型
发行模型:
class Issue < ApplicationRecord
belongs_to :category
belongs_to :subcategory
end
类别模型:
class Category < ApplicationRecord
has_many :subcategories
has_many :issues
enum status: { disabled: 0, enabled: 1 }
after_initialize :set_defaults
def self.enabled
where(status: 'enabled')
end
def set_defaults
self.status ||= 1
end
end
子类别模型
class Subcategory < ApplicationRecord
belongs_to :category
has_many :issues
enum status: { disabled: 0, enabled: 1 }
def self.enabled
where(status: 'enabled')
end
after_initialize :set_defaults
def set_defaults
self.status ||= 1
end
end
最后,这里是传递给控制器的参数:
Processing by IssuesController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"tzKDayYfEbEwTaOFup/N9kQ+8tr9c0P5otV2B0boKGrgyv+HkQaEvYJ6ZMQeR+8XgCnhJR6PosVcx0jPJpqBEA==", "category_id"=>"1", "subcategory_id"=>"1", "issue"=>{"description"=>"Replace broken keyboard.", "status"=>"1", "criticality_level"=>"1"}, "commit"=>"Create Issue"}
I was able to create an Issue via Rails Console, though.
任何人都可以告诉我如何解决这个问题吗?谢谢大家!
修改创建动作如下
def create
@category = Category.find(params[:category_id])
@issue = @category.issues.build(issue_params)
respond_to do |format|
if @issue.save
format.html { redirect_to root_path, notice: 'Issue was successfully created.' }
else
@categories = Category.enabled
@subcategories = Subcategory.enabled
format.html { render :new }
end
end
end