我的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'
答案 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
获取用户名。我希望这能帮到你。