ruby-on-rails - Ruby on Rails 中 nil:NilClass 的未定义方法“save”用于@micropost.save
问题描述
我知道这里的问题是我试图保存一个 nil 值,但我已经调试了几个小时,但我无法弄清楚是什么导致该值为零。当我点击文本字段下方的微博按钮上的帖子时,就会发生这种情况。
微博控制器
class MicropostsController < ApplicationController
before_action :logged_in_user, only: [:create, :destroy]
def show
@user = User.find(params[:id])
@micropost = current_user.microposts.build
@microposts = @user.microposts.paginate(page: params[:page])
end
def create
if @micropost.save
flash[:success] = "Micropost created!"
redirect_to root_url
else
render 'show'
end
end
def destroy
end
private
def micropost_params
params.require(:micropost).permit(:content)
end
end
微柱模型
class Micropost < ApplicationRecord
belongs_to :user
default_scope -> { order(created_at: :desc) }
validates :user_id, presence: true
validates :content, presence: true, length: { maximum: 140 }
end
查看节目
<% provide(:title, @user.first_name) %>
<div class="row">
<aside class="col-md-4">
<section class="user_info">
<h1>
<%= gravatar_for @user %>
<%= @user.first_name %>
</h1>
</section>
</aside>
</div>
<div class="row">
<aside class="col-md-4">
<section class="user_info">
<%= render 'shared/user_info' %>
</section>
<section class="micropost_form">
<%= render 'shared/micropost_form' %>
</section>
</aside>
</div>
<div class="col-md-8">
<% if @user.microposts.any? %>
<h3>Microposts (<%= @user.microposts.count %>)</h3>
<ol class="microposts">
<%= render @microposts %>
</ol>
<%= will_paginate @microposts %>
<% end %>
</div>
解决方案
您的创建操作应该是
def create
@micropost = Micropost.new(micropost_params)
if @micropost.save
flash[:success] = "Micropost created!"
redirect_to root_url
else
render 'show'
end
end
默认情况下,实例变量为零
推荐阅读
- regex - 使用正则表达式进行正则表达式
- macos - 如何为我的 AppleScript 应用程序创建 Dock 菜单?
- sql - ORA-01873 计算两个时间戳之间的差异时
- java - 如何使用 dbus 和 NetworkManager 激活连接
- sql - postgresql 交叉表语法错误:没有函数与给定的名称和参数类型匹配。您可能需要添加显式类型转换
- excel - EXCEL VBA 宏,用于将样式放入范围,然后 ucase
- javascript - React:从 Node.js 服务器转换对象列表中的时间戳并保存到状态
- python - 如何将数据框行转换为一组对?
- python - 结构类未定义尚未使用?
- oracle - 在页面刷新时提交进程触发后,如何停止我的应用程序快递?