我只是尝试根据电子邮件地址是否存在来更新记录的某些属性。
控制器:
def update
@contact = Contact.new(contact_params)
if @contact.update then
redirect_to :root, notice: 'yes was successfully updated.'
else
render "new"
end
render "show"
end
型号:
class Contact < ApplicationRecord
has_attached_file :image, styles: {large: "600x600>", medium: "300x300>", thumb: "150x150#"}
validates_attachment_content_type :image, content_type: /\Aimage\/.*\z/
#validates :email, uniqueness: true
validates :email, presence: true
end }
当然知道这有很多问题,希望能得到一些帮助。
谢谢!
1条答案
按热度按时间gxwragnw1#
当然,这里还有很多需要改进的地方,首先让我明确回答你的问题:
通过在联系人模型中添加验证,update方法将返回
false
所以邮件不会被更新。也可以通过添加case_sensitive: false
进行验证。请记住,如果您有多个服务器/服务器进程(例如,运行phusion passenger、多个mongrel等)或多线程服务器,则此验证不能保证唯一性。请检查这个答案以获得进一步的解释。但是,这对上面粘贴的代码不起作用,让我解释一下原因:
1) update方法需要传递1个参数,因此代码将抛出
ArgumentError
在那里。2)
render
在同一方法中出现多次:这将引发以下错误在此操作中多次调用渲染和/或重定向。请注意,您只能调用render或redirect,每个操作最多只能调用一次。另外请注意,重定向和render都不能终止操作的执行,因此,如果要在重定向之后退出操作,则需要执行类似于“redirect_to(…)and return”的操作。
你需要在那里重构你的代码。
为了
redirect_to: root
,请确保先配置为根路由。3) 这条线
Contact.new(contact_params)
不返回现有记录。新方法创建了一个对象示例,因此您不会在那里更新任何内容。您的方法可能的解决方案是:
希望有帮助。