2017-12-16 6 views
0

私はユーザーと投稿のあるレールアプリを持っています。チャンネルと呼ばれるもう1つのサフォールドを追加しました。このユーザーは投稿とチャンネルの両方を作成でき、投稿はユーザーとチャンネルの両方に属し、チャンネルにユーザーIDを追加します。移行を作成しましたが、すべてがうまく見えますが、チャンネルを作成中にこのエラーが発生します。1つのエラーでこのチャンネルの保存が禁止されています:

Started POST "/channels" for 127.0.0.1 at 2017-12-16 13:30:32 +0530 
Processing by ChannelsController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"IJvvEe+TR6buacH5UwtiLSJglMkq7a+Q4x7VOTqALcGka4j6tG7lPi/7kYnCQ/nzmO7PNe2eSan3sBz9NqKV2g==", "channel"=>{"name"=>"dhfkdhfk", "description"=>"jdfjdfh", "tagline"=>"jdfjdfhj", "category"=>"jdfjdf", "avatar"=>""}, "commit"=>"Create Channel"} 
    User Load (2.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT 1 [["id", 1]] 
    (2.6ms) BEGIN 
    (1.8ms) ROLLBACK 
    Rendered channels/_form.html.erb (11.5ms) 
    Rendered channels/new.html.erb within layouts/application (13.3ms) 
    Rendered layouts/_avatar_dropdown.html.erb (7.4ms) 
    Rendered layouts/_header.html.erb (12.6ms) 
    Rendered layouts/_alert_messages.html.erb (0.5ms) 
Completed 200 OK in 367ms (Views: 345.3ms | ActiveRecord: 6.7ms) 

Add_user_id_to_channel.rb

class AddUserIdToChannels < ActiveRecord::Migration 
    def change 
    add_reference :channels, :user, index: true, foreign_key: true 
    end 
end 

channel.rb

class Channel < ActiveRecord::Base 
    validates :name, :description, :user_id, presence: true 
    belongs_to :user 
    has_many :posts, dependent: :destroy 
end 
(Here is a screenshot of the exact error)

これは、コマンドラインで取得していますものです

user.rb

class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable, 
     :omniauthable, :omniauth_providers => [:facebook, :twitter, :google_oauth2] 

     act_as_mentionee 

    validates :username, presence: true 
    validate :avatar_image_size 

    has_many :posts, dependent: :destroy 
    has_many :channels, dependent: :destroy 
    has_many :responses, dependent: :destroy 
    has_many :likes, dependent: :destroy 

    after_destroy :clear_notifications 
    after_commit :send_welcome_email, on: [:create] 


    mount_uploader :avatar, AvatarUploader 

    include UserFollowing 
    include TagFollowing 
    include SearchableUser 
    include OmniauthableUser 


    private 

    # Validates the size on an uploaded image. 
    def avatar_image_size 
     if avatar.size > 5.megabytes 
     errors.add(:avatar, "should be less than 5MB") 
     end 
    end 

    # Returns a string of the objects class name downcased. 
    def downcased_class_name(obj) 
     obj.class.to_s.downcase 
    end 

    # Clears notifications where deleted user is the actor. 
    def clear_notifications 
     Notification.where(actor_id: self.id).destroy_all 
    end 

    def send_welcome_email 
     WelcomeEmailJob.perform_later(self.id) 
    end 
end 

チャンネルのモデルでは

class ChannelsController < ApplicationController 
    before_action :set_channel, only: [:show, :edit, :update, :destroy] 
    before_action :authenticate_user!, except: [:show] 
    before_action :authorize_user, only: [:edit, :update, :destroy] 

    # GET /channels 
    # GET /channels.json 
    def index 
    @channels = Channel.all 
    end 

    # GET /channels/1 
    # GET /channels/1.json 
    def show 
    end 

    # GET /channels/new 
    def new 
    @channel = Channel.new 
    @channel = current_user.channels.build 
    @user = current_user 
    end 

    # GET /channels/1/edit 
    def edit 
    end 

    # POST /channels 
    # POST /channels.json 
    def create 
    @channel = current_user.channels.build(channel_params) 
    @channel = Channel.new(channel_params) 
    @user = current_user 


    respond_to do |format| 
     if @channel.save 
     format.html { redirect_to @channel, notice: 'Channel was successfully created.' } 
     format.json { render :show, status: :created, location: @channel } 
     else 
     format.html { render :new } 
     format.json { render json: @channel.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # PATCH/PUT /channels/1 
    # PATCH/PUT /channels/1.json 
    def update 
    respond_to do |format| 
     if @channel.update(channel_params) 
     format.html { redirect_to @channel, notice: 'Channel was successfully updated.' } 
     format.json { render :show, status: :ok, location: @channel } 
     else 
     format.html { render :edit } 
     format.json { render json: @channel.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /channels/1 
    # DELETE /channels/1.json 
    def destroy 
    @channel.destroy 
    respond_to do |format| 
     format.html { redirect_to channels_url, notice: 'Channel was successfully destroyed.' } 
     format.json { head :no_content } 
    end 
    end 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_channel 
     @channel = Channel.find(params[:id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def channel_params 
     params.require(:channel).permit(:name, :description, :tagline, :category, :avatar, :user_id) 
    end 

    def authorize_user 
     begin 
     @channel = current_user.channels.find(params[:id]) 
     rescue 
     redirect_to root_url 
     end 
    end 
end 

答えて

関連する問題