如何显示与同一标签相关的用户任务?

时间:2019-12-23 02:10:58

标签: ruby-on-rails

我正在通过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

请让我知道是否需要其他任何信息来使此问题更清楚。

0 个答案:

没有答案