【发布时间】:2015-04-21 19:40:27
【问题描述】:
我正在尝试创建一个帖子页面。用户可以在其中查看所有公开帖子。我可以成功创建帖子,但我看不到它们。
Ribbits#index 显示中的 ActionController::UrlGenerationError C:/Sites/myBlog/app/views/ribbits/index.html.erb 其中第 8 行 提出:
没有路由匹配 {:action=>"show", :controller=>"users", :id=>nil} 缺少必需的键:[:id]
index.html.erb
<% @ribbits.each do |ribbit| %>
<div class="ribbitWrapper">
<a href="<%= user_path ribbit.user %>">
<img class="avatar" src="<% ribbit.user.avatar_url %>" />
<span class="name"> <%= ribbit.user.name %> </span>
</a>
@<%= ribbit.user.username %>
<span class="time"><%= time_ago_in_words(ribbit.created_at) %></span>
<p> <%= ribbit.content %></p>
</div>
<% end %>
用户控制器:
def new
@user = User.new
end
def create
@user = User.create(user_params)
if @user.save
session[:user_id] = @user.id
redirect_to @user, notice: "Thank you for signing up!"
else
render 'new'
end
end
def show
@user = User.find(params[:id])
@ribbit = Ribbit.new
end
ribbits 控制器
def index
@ribbits = Ribbit.all
@ribbit = Ribbit.new
end
def create
@ribbit = Ribbit.create(user_ribbits)
@ribbit.user_id = current_user.id
if @ribbit.save
redirect_to current_user
else
flash[:error] = "Problem!"
redirect_to current_user
end
end
private
def user_ribbits
params.require(:ribbit).permit(:content, :userid)
end
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
helper_method :current_user
还有路由文件
resources :sessions
resources :users
resources :ribbits
get 'logout', to: 'sessions#destroy', as: 'logout'
root to: 'users#new'
非常感谢您的帮助!
【问题讨论】:
-
您能否验证您的每个
@ribbits都有一个不为空的user_id? -
正如@JoeKennedy 所说,您的用户中似乎存储了一个 nil id 值。如果不是这种情况,请尝试
ribbit.user.id强制它使用 id 值而不是对象本身。 Ruby 魔法应该自己处理,但是……安全总比后悔好。或者可能是您的 avatar_url 调用中断了。那个函数是什么样子的? -
这是user.rb pastebin.com/NpTC9Mz9
-
我去 Rails 控制台搜索了我的 ribbits,实际上,我的 ribbits 没有 user_id。这是pastebin.com/whynYVbQ 的信息请注意,我的 ribbits 只有两个有 user_id,我知道为什么。如何将 user_id 与我的 ribbits 连接起来?
标签: ruby-on-rails ruby