我对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
答案 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)