找不到'id'= 1003

时间:2015-09-30 04:22:06

标签: ruby-on-rails postgresql controller

我的PostgreSQL数据库中有1000个提示和95个用户,我希望用户能够创建新提示并进入显示页面,在那里他们可以看到提示名称和描述以及作者信息。

但是,我在此行@author_firstname = User.find(params[:id]).first_name上收到错误“无法找到'id'= 1003的用户”。我不确定为什么它将用户ID分配给新的Tip ID,但我希望将User的id绑定到Tip而不是Tip id。

这是我的小贴士控制器:

class TipsController < ApplicationController
  def index
    @tips = Tip.all
  end

  def new
    @tip = Tip.new
  end

  def create
    @tip = Tip.create(tip_params)
    redirect_to "/tips/#{@tip.id}"
  end

  def show
    @tip = Tip.find(params[:id])
    @author_firstname = User.find(params[:id]).first_name
    @author_lastname = User.find(params[:id]).last_name
  end

  private
  def tip_params
    params.require(:tip).permit(:name, :description)
  end
end

我的一些路线:

get '/users/new', to: 'users#new' 
post '/users', to: 'users#create'
get 'users/:id', to: 'users#show', as: 'user'
get 'users/:id/edit', to: 'users#edit'
patch 'users/:id', to: 'users#update'

get '/places/:id', to: 'places#show'

get '/tips/new', to: 'tips#new'
post '/tips', to: 'tips#create'
get '/tips/:id', to: 'tips#show', as: 'tip'

2 个答案:

答案 0 :(得分:2)

TipsController内,params[:id]会为id提供tip而不是id的{​​{1}}。

作为,您的user belongs_to tip,因此您应该可以使用此user <{1}}获取user

因此,您的@tip.user方法可以是:

show

答案 1 :(得分:0)

看起来当您保存提示时,通过在创建方法中添加@tip.user_id = current_user.id,您没有在提示中保存current_user ID。

class TipsController < ApplicationController
  def index
    @tips = Tip.all
  end

  def new
    @tip = Tip.new
  end

  def create
    @tip = Tip.new(tip_params)
    @tip.user_id = current_user.id
    if @tip.save
      redirect_to "/tips/#{@tip.id}"
    else
      render :new
    end
  end

  def show
    @tip = Tip.find(params[:id])
    @author_firstname = @tip.user.first_name
    @author_lastname = @tip.user.last_name
  end

  private
  def tip_params
    params.require(:tip).permit(:name, :description, :user_id)
  end
end

接下来,您可以致电@tip.user.first_name获取用户名。我希望这能帮到你。