私のtoy_appに新しいマイクロポストを追加または編集することはできません(Railsチュートリアルの第2章)。私はユーザーとマイクロポストを問題なく追加しました。それから私はhas_many/belongs_to関係を指定しました。それ以来、私は得ています:Michael HartlのRuby on Railsチュートリアルでエラーメッセージが表示される:MicroPostsController#createのNoMethodError。このメッセージが表示されないようにするにはどうすればよいですか?
"マイクロポストを作成しようとすると、マイクロポストを更新するときに同様のメッセージが表示されます。
私は1人のユーザーしかいないが、ユーザーIDは「3」だった...なぜそれが1でないのかわからない。私はすべてのマイクロポストを削除してから1人のユーザーしかいない。このエラーメッセージを回避するにはどうすればよいですか?もし誰かが私が大いに感謝するのを助けることができたら。
マイクロポストコントローラー:
class MicropostsController < ApplicationController
before_action :set_micropost, only: [:show, :edit, :update, :destroy]
# GET /microposts
# GET /microposts.json
def index
@microposts = Micropost.all
end
# GET /microposts/1
# GET /microposts/1.json
def show
end
# GET /microposts/new
def new
@micropost = Micropost.new
end
# GET /microposts/1/edit
def edit
end
# POST /microposts
# POST /microposts.json
def create
@micropost = Micropost.new(micropost_params)
respond_to do |format|
if @micropost.save
format.html { redirect_to @micropost, notice: 'Micropost was successfully created.' }
format.json { render :show, status: :created, location: @micropost }
else
format.html { render :new }
format.json { render json: @micropost.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /microposts/1
# PATCH/PUT /microposts/1.json
def update
respond_to do |format|
if @micropost.update(micropost_params)
format.html { redirect_to @micropost, notice: 'Micropost was successfully updated.' }
format.json { render :show, status: :ok, location: @micropost }
else
format.html { render :edit }
format.json { render json: @micropost.errors, status: :unprocessable_entity }
end
end
end
# DELETE /microposts/1
# DELETE /microposts/1.json
def destroy
@micropost.destroy
respond_to do |format|
format.html { redirect_to microposts_url, notice: 'Micropost was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_micropost
@micropost = Micropost.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def micropost_params
params.require(:micropost).permit(:context, :user_id)
end
end
マイクロポストモデル:
class Micropost < ApplicationRecord
belongs_to :user
validates :content, length: { maximum: 140 }
end
ユーザーモデル:
class User < ApplicationRecord
has_many :microposts
end
ユーザーコントローラー
class UsersController < ApplicationController
before_action :set_user, only: [:show, :edit, :update, :destroy]
# GET /users
# GET /users.json
def index
@users = User.all
end
# GET /users/1
# GET /users/1.json
def show
end
# GET /users/new
def new
@user = User.new
end
# GET /users/1/edit
def edit
end
# POST /users
# POST /users.json
def create
@user = User.new(user_params)
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render :show, status: :created, location: @user }
else
format.html { render :new }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /users/1
# PATCH/PUT /users/1.json
def update
respond_to do |format|
if @user.update(user_params)
format.html { redirect_to @user, notice: 'User was successfully updated.' }
format.json { render :show, status: :ok, location: @user }
else
format.html { render :edit }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
# DELETE /users/1
# DELETE /users/1.json
def destroy
@user.destroy
respond_to do |format|
format.html { redirect_to users_url, notice: 'User was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_user
@user = User.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def user_params
params.require(:user).permit(:name, :email)
end
end
schema.rb:あなたのmicropost_params
あなたがcontext
を許可しているに
ActiveRecord::Schema.define(version: 20171222133429) do
create_table "microposts", force: :cascade do |t|
t.text "content"
t.integer "user_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "users", force: :cascade do |t|
t.string "name"
t.string "email"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
end
ようこそ、私は明確な質問を見つけることができませんでした。あなたの投稿を修正し、解決する質問を定義できますか?お読みください[お問い合わせ方法](https://stackoverflow.com/help/how-to-ask) –