鉴于以下情况:
class WebsitesController < ApplicationController
# POST /websites/save
# POST /websites/save.json
def save
Website.exists?(name: params[:website][:name]) ? update : create
end
# POST /websites
# POST /websites.json
def create
@server = Server.find_or_create_by_name(params[:server_id])
@website = @server.websites.new(params[:website])
#etc... @website.save
end
# PUT /websites/1
# PUT /websites/1.json
def update
@website = Website.find_by_name(params[:website][:name])
#etc... @website.update_attributes
end
end
客户端没有这些模型的任何 ID
发送的请求只有names
,但没有ids
。
以及以下型号
class Website < ActiveRecord::Base
serialize :website_errors
attr_accessible :plugins_attributes
has_many :plugins
accepts_nested_attributes_for :plugins
end
class Plugin < ActiveRecord::Base
belongs_to :website
end
当我向 发出POST
请求时/websites/save.json
,Website
如果存在,则会正确更新,但Plugins
属于它的总是会重新创建,从而导致数据库中的内容重复。为什么会这样?我重定向到update
调用的操作,它update_attributes
怎么可能不更新它?我认为这是因为请求中没有提供 ID。
我可以让Controller
听plugin_name
而不是plugin_id
吗?