我问了一个类似的question,但回答涉及使用current_user。这个问题有点不同。 我有一个简单的数据库,用户可以在其中创建类别。每个类别都有很多任务。我希望用户单击某个类别以查看该类别的任务。用户和类别之间的关系是1到多,类别和任务之间的关系也是一对多。
我遇到的问题是在任务中创建外键,以便它可以告诉它属于哪个类别。当用户单击类别
时,就会发生任务创建我的模型如下
category.rb
class Category < ActiveRecord::Base
has_many :tasks
belongs_to :users
end
task.rb
class Task < ActiveRecord::Base
belongs_to :categories
end
控制器
def create
@task = Task.new(task_params)
respond_to do |format|
if @task.save
format.html { redirect_to @task, notice: 'Task was successfully created.' }
format.json { render :show, status: :created, location: @task }
render :layout => false
else
format.html { render :new }
format.json { render json: @task.errors, status: :unprocessable_entity }
render :layout => false
end
end
end
我认为问题是我用于task_params的问题。目前我没有办法解决这个问题。如何在用户创建任务时将类别外键插入任务?
答案 0 :(得分:0)
首先将您的belongs_to
关联更改为 单数 。
belongs_to :user #in category.rb
belongs_to :category #in task.rb
然后在create
方法中,为category
定义 实例变量 ,如下所示
@category = Category.find(params[:category_id])
并更改您的create
方法,如下所示
def create
@category = Category.find(params[:category_id])
@task = Task.new(task_params)
@task.category_id = @category.id
respond_to do |format|
if @task.save
format.html { redirect_to @task, notice: 'Task was successfully created.' }
format.json { render :show, status: :created, location: @task }
render :layout => false
else
format.html { render :new }
format.json { render json: @task.errors, status: :unprocessable_entity }
render :layout => false
end
end
end
并确保:category_id
方法中有task_params
。
<强> 更新 强>
您还应该在控制器中定义task_params
方法,如下所示。
def task_params
params.require(:task).permit(:id, :blobby, :challenge_id, :category_id)
end