我正在通过Ruby on Rails创建一个todo应用程序。我没有使用act_as_taggable gem为标签和标记创建了自己的模型。我已使用devise进行用户身份验证。我的功能之一是拥有一个页面,该页面可以显示与标签相关的所有用户任务。但是我试图在标签控制器中更改show和index方法以合并current_user,但它总是抛出此错误
(#的未定义方法tag
是您的意思吗?请点击标签):
Error
我无法弄清楚如何编辑代码以在current_user中创建标签并正确处理current_user的tag_list。
这是相关代码:
任务模型
has_many :taggings, dependent: :destroy
has_many :tags, through: :taggings
validates :item, presence: true,
length: { minimum: 5 }
belongs_to :user
validate :due_date_cannot_be_in_the_past
def self.tagged_with(name)
Tag.find_by!(name: name).tasks
end
def tag_list
tags.map(&:name).join(" ")
end
def tag_list=(names)
self.tags = names.split(" ").map do |name|
Tag.where(name: name).first_or_create!
end
end
def due_date
due.to_s
end
def due_date=(str)
self.due = Chronic.parse(str).to_date.to_s
rescue
@invalid_date = true
end
def validate
errors.add :due, 'is not a valid date' if @invalid_date
end
def due_date_cannot_be_in_the_past
if due.past?
errors.add(:due_date, "is not a valid date")
end
end
end
任务控制器:
def index
@incomplete_tasks = Task.where(complete: false)
@complete_tasks = Task.where(complete: true)
end
def show
@task = current_user.tasks.find(params[:id])
end
def new
@task = current_user.tasks.build
end
def edit
@task = Task.find(params[:id])
end
def create
@task = current_user.tasks.build(task_params)
if @task.save
redirect_to @task
else
render 'new'
end
end
def update
@task = Task.find(params[:id])
if @task.update(task_params)
redirect_to @task
else
render 'edit'
end
end
def destroy
@task = Task.find(params[:id])
@task.destroy
redirect_to tasks_path
end
def complete
@task = current_user.tasks.find(params[:id])
@task.update_attribute(:complete, true)
flash[:notice] = "Task Marked as Complete"
redirect_to tasks_path
end
private
def task_params
params.require(:task).permit(:item, :description, :tag_list, :due)
end
end
标签控制器:
def show
@tag = current_user.tag.find(params[:id])
end
def index
@tag = current_user.tag.all
end
请让我知道是否需要其他任何信息来使此问题更清楚。