Попытка создать индекс, который отображает только задачи, созданные этим пользователем с помощью устройства devise. - PullRequest
0 голосов
/ 25 сентября 2018

Started POST "/tasks" for 127.0.0.1 at 2018-09-25 17:25:24 +0100
Processing by TasksController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"MnJuOlEcHfPYca7mzWk5WdEO0jVcuS+gGWiFVC++ARNmtpPTjC/9sd7AGpgV8LSybNjz1PoOIdDYddUhnOAFOw==", "task"=>{"name"=>"j", "description"=>"j"}, "commit"=>"Create Task"}
  User Load (4.4ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2  [["id", 1], ["LIMIT", 1]]
  ↳ /Users/benherring/.rbenv/versions/2.4.4/lib/ruby/gems/2.4.0/gems/activerecord-5.2.1/lib/active_record/log_subscriber.rb:98
   (0.3ms)  BEGIN
  ↳ app/controllers/tasks_controller.rb:22
   (0.2ms)  ROLLBACK
  ↳ app/controllers/tasks_controller.rb:22
Redirected to http://localhost:3000/tasks
Completed 302 Found in 11ms (ActiveRecord: 4.9ms)

Попытка создать индекс, который отображает только задачи, созданные этим пользователем с помощью devise.посмотрел много здесь, но не могу найти решение моей проблемы.Я сделал ассоциации.текущая ошибка в этой строке <% @tasks.each do |task| %>.

PG :: UndefinedColumn: ERROR: столбец tasks.user_id не существует

, который отображается красным.мне нужно изменить метод создания?если так как?спасибо

<h1>TASKS</h1>
<div class="body">
  <div class="list">
    <% @tasks.each do |task| %>
    <ul>
      <li>
        <%= link_to task.user.name ,task_path(task), class: "tasks"   %>
        |
        <%= link_to "Delete", task_path(task), method: :delete, data: {confirm: "Are you sure?"} %>
      </li>
    </ul>
    <% end %>
  </div>
  <div class="form">
    <div>
  <%= simple_form_for @task, id: "form-submit" do |f| %>
   <%= f.input :name %>
   <%= f.input :description %>
   <%= f.button :submit, class: "btn btn-danger" ,id: "sweet-alert-demo" %>
  <% end %>

</div>
  </div>
<%#= link_to "Add Task" ,new_task_path, class: "btn btn-primary" %>
</div>
class TasksController < ApplicationController

  def index
    # @tasks = Task.all
    @task= Task.new
    @tasks = Task.where(user: current_user)

  end

  def show
    @task = Task.find(params[:id])
  end

  def new
    # @task = Task.new
    # @user = current_user
  end

  def create
    @task = Task.new(task_params)
    @task.save
    redirect_to tasks_path
  end

  def edit
    @task = Task.find(params[:id])
  end

  def update
    @task = Task.find(params[:id])

    @task.update(task_params)
    redirect_to task_path
  end

   def destroy
    @task = Task.find(params[:id])
    @task.destroy
    redirect_to tasks_path
  end




    private

  def task_params
    params.require(:task).permit(:name, :description)
  end

end

1 Ответ

0 голосов
/ 25 сентября 2018

PG :: UndefinedColumn: ERROR: столбец tasks.user_id не существует

Ошибка означает, что в таблице tasks нет столбца user_id.

Решение:

Создание миграции, которая добавит user_id к tasks

rails g migration add_user_id_to_tasks user_id:integer

И сделает rake db:migrate

Попытка создать индекс, который отображает только задачи, созданные этим пользователем с помощью devise

Теперь, после миграции, измените метод index в tasks_controller на

def index
  @task= Task.new
  @tasks = current_user.tasks #this will give the tasks of the current user
end

Обновление:

(0,2 мс) ROLLBACK

У вас есть откат, который означает, что запись не сохранена,Вероятно, это связано с тем, что user_id равен нулю в params, а @task.save молча завершается сбоем, не вызывая исключения.Чтобы это исправить, добавьте ниже

def create
  @task = Task.new(task_params)
  @task.user_id = current_user.id # add this line
  @task.save
  redirect_to tasks_path
end

и белый список :user_id в методе task_params.

def task_params
  params.require(:task).permit(:name, :description, :user_id)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...