如何使用当前记录的ID更新表中的记录

时间:2015-03-19 00:39:24

标签: ruby-on-rails ruby foreign-key-relationship

我对Ruby和Rails都很陌生,而且还没有内化很多。我面临的问题似乎应该很容易解决,但对我来说这并不简单。如果我的一些术语不精确,我道歉。

版本:Rails 4.2.0 | Ruby 2.1

我的模特主题发布&的概要即可。 帖子嵌套在主题下,因此当我create发布帖子时,我可以使用subject_id更新帖子表,如下所示:

def create
    @subject = Subject.find(params[:subject_id])
  @post = current_user.posts.build(params.require(:post).permit(:title, :body))
  @post.subject = @subject
...

摘要嵌套在一个帖子下,属于一个帖子。在创建摘要时,我想使用summary_id 更新帖子表。我无法绕过如何做到这一点,并且无法找到Stack Overflow或其他地方的方式。

如果它是一个SQL命令,并且当前帖子的id为23且当前概要的id为9,那么它将类似UPDATE posts SET posts.synopsis_id = 9 WHERE posts.id = 23

相关的控制器,型号和架构信息如下。如果我需要提供更多信息,请告诉我。

控制器:

synopses_controller.rb

def create
    @subject = Subject.find(params[:subject_id]) #find the Subject id
    @post = Post.find(params[:post_id]) #find the post id
  @synopsis = Synopsis.new(params.require(:synopsis).permit(:name, :description))
  #UPDATE THE POST WITH SYNOPSIS_ID!
  if @synopsis.save
    flash[:notice] = "Synopsis was saved."
    redirect_to [@subject, @post, @synopsis] #go to the Synopsis page
  else
    flash[:error] = "There was an error saving the Synopsis. Please try again."
    render :show
  end
end

型号:

synopsis.rb

class Synopsis < ActiveRecord::Base
  belongs_to :post
end

post.rb

class Post < ActiveRecord::Base
 has_one :synopsis
 has_many :comments
 belongs_to :user
    belongs_to :subject
end

架构:

schema.rb

create_table "posts", force: :cascade do |t|
 t.string   "title"
 t.text     "body"
 t.datetime "created_at", null: false
 t.datetime "updated_at", null: false
 t.integer  "user_id"
 t.integer  "subject_id"
 t.integer  "synopsis_id"
end

create_table "synopses", force: :cascade do |t|
 t.string   "name"
 t.text     "description"
 t.datetime "created_at",  null: false
 t.datetime "updated_at",  null: false
end

2 个答案:

答案 0 :(得分:0)

你可以这样做:

def create
  # ....
  if @synopsis.save
    @post.update(:synopsis_id, @synopsis.id)
    flash[:notice] = "Synopsis was saved."
    redirect_to [@subject, @post, @synopsis] #go to the Synopsis page
  else
  #....
end

答案 1 :(得分:0)

你可能会过度思考这个问题。给出你想做的简单的sql命令:

UPDATE posts SET posts.synopsis_id = 9 WHERE posts.id = 23

你必须做这样的事情才能做到这一点。

Post.find(23).update(:synopsis_id => 9)