【问题标题】:Rails is not assigning a user id to my wiki objectRails 没有为我的 wiki 对象分配用户 ID
【发布时间】:2014-12-30 08:49:40
【问题描述】:

我是一名初学者,现在已经学习 Ruby on Rails 大约 4 个月了。

我正在构建一个应该允许私人 wiki 的基本 wiki 应用程序。现在,当用户创建 wiki 时,rails 不会为 wiki 分配用户 ID。当我在 Rails 控制台中查看 wiki 时,一切都在那里 - created_at、title、body、wiki id - 但 user_id 始终为零。我怎样才能解决这个问题?

这是我的 Wiki 控制器:

class WikisController < ApplicationController
      def index

        @wikis = Wiki.all     
      end

      def new
        @wiki =Wiki.new
        authorize @wiki
      end

      def show
        @wiki = Wiki.find(params[:id])
      end

      def edit
        @wiki = Wiki.find(params[:id])
        authorize @wiki
      end

      def update
        @wiki = Wiki.find(params[:id])
        authorize @wiki
        if @wiki.update_attributes(wiki_params)
          flash[:notice] = "Wiki was updated."
          redirect_to @wiki
        else
          flash[:error] = "There was an error updating the wiki."
          render :edit
        end
      end

      def create
        @wiki = Wiki.new(wiki_params)
        authorize @wiki
        if @wiki.save
          flash[:notice] = "Wiki was saved."
          redirect_to @wiki
        else
          flash[:error] = "There was an error saving the wiki. Please try again."
          render :new
        end 
      end

      def destroy
        @wiki = Wiki.find(params[:id])
        name = @wiki.title
        if @wiki.destroy
          flash[:notice] =  "\"#{name}\" was deleted."
          redirect_to wikis_path
          else
          flash[:error] = "There was an error deleting the wiki."
          redirect_to @wiki
        end
      end
    end

    private

      def wiki_params 
        params.require(:wiki).permit(:title, :body, :private, :user_id)
      end

...这是我的模型:

    class User < ActiveRecord::Base


    def admin?
      role == 'admin'
    end

    def member?
      role == 'member'
    end

    def premium_member?
      role == 'premium_member'
    end


    has_many :collaborations
    has_many :wikis, through: :collaborations

      devise :database_authenticatable, :registerable,
             :recoverable, :rememberable, :trackable, :validatable, :confirmable

    end

加入表...

class Collaboration < ActiveRecord::Base
  belongs_to :user
  belongs_to :wiki
end

维基模型...

class Wiki < ActiveRecord::Base
  has_many :collaborations
  has_many :users, through: :collaborations

end

最后是架构:

create_table "collaborations", force: true do |t|
    t.integer "user_id"
    t.integer "wiki_id"
  end

  create_table "users", force: true do |t|
    t.string   "name"
    t.string   "role",                   default: "member", null: false
    t.string   "email",                  default: "",       null: false
    t.string   "encrypted_password",     default: "",       null: false
    t.string   "reset_password_token"
    t.datetime "reset_password_sent_at"
    t.datetime "remember_created_at"
    t.integer  "sign_in_count",          default: 0,        null: false
    t.datetime "current_sign_in_at"
    t.datetime "last_sign_in_at"
    t.string   "current_sign_in_ip"
    t.string   "last_sign_in_ip"
    t.string   "confirmation_token"
    t.datetime "confirmed_at"
    t.datetime "confirmation_sent_at"
    t.string   "unconfirmed_email"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  add_index "users", ["email"], name: "index_users_on_email", unique: true
  add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true

  create_table "wikis", force: true do |t|
    t.string   "title"
    t.string   "body"
    t.integer  "user_id"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.boolean  "private",    default: false
  end

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案1】:

    如果您说一个wiki has_many :users, through: :collaborations,那么wiki 上的user_id 列将不会被rails 自动填充。相反,它应该将wiki_iduser_id 保存为collaborations 表中的一行。否则,一个 wiki 只能有一个用户,对吧?

    如果您真的想在 wiki 表格列上保存 user_id,您可以在 wiki 模型上的 callback 中执行此操作。

    【讨论】:

      猜你喜欢
      • 2014-12-04
      • 1970-01-01
      • 1970-01-01
      • 2011-12-24
      • 2015-02-03
      • 2017-09-12
      • 2019-07-10
      • 1970-01-01
      • 2019-05-03
      相关资源
      最近更新 更多