所以我正在开展个人项目以了解rails嵌套,我决定使用Devise。我创建了一个配置文件模型和控制器来处理用户稍后输入的其他信息。并利用after_create :create_profile
来处理繁重的工作。我终于在模型和控制器中设置了所有设置,以便正确传递信息,但是当涉及到实际显示用户的配置文件时,我的困惑就出现了。
这是我的个人资料控制器
class ProfileController < ApplicationController
before_action :find_profile
before_action :find_user
before_action :authenticate_user!
def new
@profile = Profile.new
end
def create
@profile = current_user.create_profile(profile_params)
end
def show
@profile = @user.profile
end
def update
@profile.update_attributes(profile_params)
if @profile.save
redirect_to profile_path(current_user)
end
end
private
def find_user
@user = User.find(params[:id])
end
def find_profile
@profile = Profile.find(params[:id])
end
def profile_params
params.require(:profile).permit(:tagline, :age, :website)
end
end
在rails控制台中,我可以很容易地操作数据,但在实际使用中(视图)我发现情况并非如此。
例如,如果我想在rails控制台中显示第二个用户的个人资料,我可以这么做。
@u = User.find(params[:id])
找到该用户,然后我可以@u.profile
抓取他的关联个人资料。
由于我将要寻找相当多的用户,因此创建方法并使用before_action
对我来说是有意义的。所以我想我可以在<%= @user.profile.tagline %> to grab the user's tagline from their tagline. But that's not working out too well. I also tried
@ profile.user.tagline , which displays nothing (no error is thrown because I added
attr_accessor`中为用户模型上的标语行执行以下操作。
有人有什么建议吗?关于我做错了什么的暗示?
答案 0 :(得分:0)
我可以看到的主要问题是,您使用params[:id]
来查找User
和Profile
。我假设只有一个应该是正确的。
首先尝试找出你传递的id的时间(这可以从你调用个人资料页面的链接中找到)
然后尝试在页面中打印@user和@profile变量。你可以通过(在你的视图中)来做到这一点
#show.html.erb
<%= @user.inspect %>
<%= @profile.inspect %>
如果您愿意深入了解更多细节,可以使用像pry这样的调试器宝石
答案 1 :(得分:0)
我想通了,好不是真的弄清楚了。它刚刚重新启动我的rails服务器时就开始工作了。
让这成为一个孩子的教训,有时候不是把所有东西分开并把它重新组合在一起......只是尝试重新启动你的rails服务器ha!