分配所有者并查找所有者的任务 - rails db

时间:2013-10-05 04:17:59

标签: ruby-on-rails

我正在创建一个允许用户登录的应用程序,保留用户的会话并允许用户创建任务。每个任务都有一个所有者。应该按照所有者呈现任务(意味着用户只能看到他创建的任务)。

我的用户表包含:string name, string username, string password,我的任务表有 string title string body integer owner(应该是user.id)

我已经定义了会话并且他们正在工作。 在我的会话控制器中,我有一个方法,将我重新编写到主页面,用户应该在其中查看所有任务(如果有任务)+创建新任务按钮或查看带有创建新任务按钮的空白页面

  def new
    if signed_in?
      redirect_to "/tasks/index"
    end
  end

我的任务/索引视图包含一个迭代任务(如果存在)并在屏幕上显示它们的方法

<h1>tasks</h1>
<%= link_to 'New Task', new_task_path %>
<ul>
  <% @tasks.each do |task| %>
  <li>
    <div>    
      <p><strong>Title:</strong>
      <%= task.title %></p>

    </div>
  </li>
  <% end %>
</ul>

和我的任务控制器:(我有一个编辑方法,我只是不在这篇文章中输入它)

class TasksController < ApplicationController
  before_action :set_task, only: [:show, :update, :destroy]

  def index
    @tasks = Task.all
  end

  def show
  end

  def new
    @task = Task.new
  end

  def edit
  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 action: 'show', status: :created, location: @task }
      else
        format.html { render action: 'new' }
        format.json { render json: @task.errors, status: :unprocessable_entity }
      end
    end
  end

  def destroy
    @task.destroy
    respond_to do |format|
      format.html { redirect_to tasks_url }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_task
      @task = Task.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def task_params
      params.require(:task).permit(:title, :user_id, :content)
    end
end

我的路线

 resources :tasks
  resources :users
  resources :sessions, only: [:new, :create, :destroy]
  root  'sessions#new'
  match '/new',  to: 'users#new',  via: 'get'
  match '/signin',  to: 'sessions#new',         via: 'get'
  match '/signout', to: 'sessions#destroy',     via: 'delete'

当我将用户发送到任务/索引时,我收到以下错误

Couldn't find Task with id=index

    # Use callbacks to share common setup or constraints between actions.
    def set_task
      @task = Task.find(params[:id])
    end

我的数据库是空的,我希望看到带有创建任务按钮的空白页面。任何想法为什么我会收到此错误?

1 个答案:

答案 0 :(得分:1)

如果您使用资源创建路由,那么您应该使用tasks_path方法重定向到任务控制器中的索引操作:

def new
  if signed_in?
    redirect_to tasks_path   #Or, "/tasks"
  end
end

您可以阅读有关rails路由架构的信息: http://guides.rubyonrails.org/routing.html