我正在尝试创建帖子页面。用户可以看到所有公开帖子。我可以成功创建帖子,但我看不到它们。
Ribbits中的ActionController :: UrlGenerationError #index显示 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'
真的很感激帮助!
答案 0 :(得分:1)
正如我们在对该问题的评论中发现的,@ribbits
部分user_id
没有user_ribbits
设置。
为了解决您的另一个问题“我如何将user_id与我的ribbits连接起来,我的猜测是你有一个带有user_id null的ribbits,因为你的:userid
方法允许:user_id
而不是Ribbit
当然,假设您在创建ribbit时正确地将user_id从您的视图传递给控制器。
为了确保ribbits包含user_id,您可以将以下内容添加到ribbit.rb
模型(validates :user_id, presence: true
)中:
{{1}}
如果还有其他问题,这至少可以防止你在没有user_id的情况下创建一个ribbit。
我希望这有帮助!