gpt4 book ai didi

ruby-on-rails - Rails-更新单个属性:使用自定义操作链接还是使用隐藏字段链接表单?

转载 作者:行者123 更新时间:2023-12-03 08:57:32 27 4
gpt4 key购买 nike

假设我有一个User模型,其中有一个facebook_uid字段对应于用户的facebook ID。

我想允许用户取消链接他的Facebook帐户。这样做,我需要将此属性设置为nil。

我目前看到2种方法

第一种方式:创建自定义操作并链接到它

# app/controllers/users_controller.rb
def unlink_facebook_account
@user = User.find params[:id]
# Authorization checks go here
@user.facebook_uid = nil
@user.save
# Redirection go here
end

# config/routes.rb
ressources :users do
get 'unlink_fb', :on => :member, :as => unlink_fb
end

# in a view
= link_to "Unlink your facebook account", unlink_fb_path(@user)

第二种方式:为现有的更新操作创建一个表单
# app/views/user/_unlink_fb_form.html.haml
= form_for @user, :method => "post" do |f|
= f.hidden_field :facebook_uid, :value => nil
= f.submit "Unlink Facebook account"

我都不喜欢这两种方式。
  • 在第一个中,我必须为更新 Controller 已经可以执行的操作添加一个新操作。
  • 在第二个示例中,如果不自定义更新操作,则无法将facebook_uid设置为nil,并且在不添加一些JavaScript的情况下,不能拥有链接而不是按钮。

  • 不过,对于这种情况,您会推荐什么作为最佳和最优雅的解决方案?我错过了第三种选择吗?

    解决方案(由Abdullah Jibaly建议)

    使用指向update操作的链接,并使用属性作为参数进行更新;处理属性设置为0的情况
    = link_to "Unlink your facebook account", 
    user_path(@user,
    :user => { :facebook_uid => 0}),
    :method => :put,
    :confirm => "Are you sure?"

    最佳答案

    不确定您的路由是什么样子,但是如果您有更新操作,它应该可以与link_to一起使用。如果使用链接,请确保使用PUT或POST的方法(最好是PUT,因为它是更新的):

    link_to("Unlink your facebook account", user_path(@user, :facebook_uid => nil), :method => :put, :confirm => "Are you sure?")

    关于ruby-on-rails - Rails-更新单个属性:使用自定义操作链接还是使用隐藏字段链接表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4671284/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com