【问题标题】:Active Records - Userr_id - rails 4活动记录 - Userr_id - rails 4
【发布时间】:2015-04-01 23:43:17
【问题描述】:

我是 Rails 新手,因此我们将不胜感激。我有模型用户和广告。用户 has_many adverts 和 Advert 属于一个用户。

问题:当用户创建广告时,我希望创建的广告自动链接到创建广告的当前用户。我不确定如何解决这个问题

我知道如何在控制台中为用户分配广告

advert = Advert.first
advert.userr_id = 3
advert.save

但我不确定如何在我的控制器中实现这一点。任何方向性的建议将不胜感激

架构

ActiveRecord::Schema.define(version: 20150330233948) do

  create_table "adverts", force: true do |t|
    t.string   "title"
    t.text     "content"
    t.integer  "category_jobtype_id"
    t.integer  "category_positiontype_id"
    t.integer  "salarystart"
    t.integer  "salaryend"
    t.integer  "category_country_id"
    t.string   "city"
    t.string   "town"
    t.string   "postcode"
    t.integer  "category_editorialapproval_id"
    t.integer  "category_applicationrequest_id"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.integer  "userr_id"
  end

  create_table "userrs", force: true do |t|
    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.datetime "created_at"
    t.datetime "updated_at"
    t.string   "firstname"
    t.string   "lastname"
    t.string   "companyname"
    t.integer  "category_businesstype_id"
  end

  add_index "userrs", ["email"], name: "index_userrs_on_email", unique: true
  add_index "userrs", ["reset_password_token"], name: "index_userrs_on_reset_password_token", unique: true

end

型号

class Advert < ActiveRecord::Base
  belongs_to :user
end

class Userr < ActiveRecord::Base
  has_many :adverts
end

控制器:广告

class AdvertsController < ApplicationController
  respond_to :html, :xml, :json
  before_action :set_advert, only: [:show, :edit, :update, :destroy]

  def index
    @adverts = Advert.all
    respond_with(@adverts)
  end

  def show
    respond_with(@advert)
  end

  def new
    @advert = Advert.new
    respond_with(@advert)
  end

  def edit
  end

  def create
    @advert = Advert.new(advert_params)
    @advert.save
    respond_with(@advert)
  end

  def update
    @advert.update(advert_params)
    respond_with(@advert)
  end

  def destroy
    @advert.destroy
    respond_with(@advert)
  end

  private
    def set_advert
      @advert = Advert.find(params[:id])
    end

    def advert_params
      params.require(:advert).permit(:title, :content, :category_jobtype_id, :category_positiontype_id, :salarystart, :salaryend, :category_country_id, :city, :town, :postcode, :category_editorialapproval_id, :category_applicationrequest_id)
    end
end

控制器:用户

任何帮助将不胜感激。书籍推荐或教程会很有帮助....非常感谢

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4


    【解决方案1】:

    一旦你可以访问用户对象,基本上你可以这样做:

    def create
      @advert = Advert.create(advert_params)
      user.adverts << @advert
      respond_with(@advert)
    end
    

    当您使用has_many 方法时,模型会“免费”接收一些方法。 &lt;&lt;() 方法只是其中之一。你可以找到很多关于关联的东西,这些方法会自动生成here

    【讨论】:

    • 感谢@Tiago,但它似乎不起作用。当用户创建广告时,它不会将用户分配给广告。广告在控制台中仍有一个 user_id,表示为“nil”
    猜你喜欢
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    • 1970-01-01
    • 1970-01-01
    • 2016-05-05
    相关资源
    最近更新 更多