gpt4 book ai didi

ruby-on-rails - Rails 3 如何使用 link_to 更改数据库中 bool 值的值?

转载 作者:行者123 更新时间:2023-12-04 02:10:16 27 4
gpt4 key购买 nike

我正在尝试创建一个简单的链接,允许管理员批准我网站上的用户

与这家伙尝试的非常相似:In Rails 3 how do I use button_to to change the value of a boolean?

这是它应该如何工作:

  • 管理员单击链接以批准用户
  • 链接调用UsersController中的激活函数
  • 事件函数调用用户模型
  • 用户模型将批准的属性更新为 true 并保存它

  • 这就是我要怎么做

    在我的用户#index View 中
     <% @users.each do |user| %> 
    <%= link_to 'Approve', :action => "index", :method => 'activate', :id => user.id, :class => 'btn btn-mini btn-danger' %>
    <% end %>

    在我的用户 Controller 中
    def activate
    @user = User.find(params[:user])
    @user.activate_user
    end

    在我的用户模型中
    def activate_user 
    self.approved = 'true'
    self.save
    end

    和我的路线
    devise_for :users, :controllers => { :registrations => "registrations" }

    resources :users do
    member do
    get 'activate'
    put 'activate'
    end
    end

    match "users/:id/activate" => "users#activate"

    现在,当我单击链接(以批准用户)时,我被发送回用户索引页面(就像我应该的那样),但用户字段“已批准”仍设置为 false :我

    我点击链接后得到的网址:
      http://localhost:3000/users?class=btn+btn-mini+btn-danger&id=2&method=activate

    有任何想法吗?

    更新

    按照建议 iv 将 URL 添加到 link_to 助手
    <% @users.each do |user| %> 
    <%= link_to "Approve", :controller => "users", :id => user.id, :action => "activate", :method => :put, :approved => true %>
    <% end %>

    当我点击帮助链接时,我得到
    wrong number of arguments (1 for 2) 

    在 app/controllers/users_controller.rb:7:in 中“激活”
    def activate
    @user = User.find(params[:id])
    @user.update_attribute(params[:user])
    redirect_to "/users?approved=false"
    end

    错误所在的第 7 行
    @user.update_attribute(params[:user])

    我还应该在那里放什么?

    哦,这是我使用此方法的路线
    match "/users/:id/activate" => "users#activate"

    更新 V2
    所以我已将该更新行更改为:
    @user.update_attributes(@user.approved, "true")

    除了将值更改为 true 之外,它似乎可以做我想做的一切!

    我还尝试将 1 用于 true(和 update_attribute 函数)和非字符串。

    解决方案

    嗯,这很尴尬,但碰巧在我的用户模型中我有 attr_accessor :approved这导致模型从未去数据库更新 :approved列但它更新了局部变量 :approved所以下次当我看专栏时,当然是 :approved值没有改变

    网址?
    如果您的模型中有与您尝试更新的列同名的 attr_accessor => 删除它

    最佳答案

    您可以更新下面的代码

    您查看

    <% @users.each do |user| %> 
    <%= link_to 'Approve', active_user_path(user) %>
    <% end %>

    你的 Controller
    def activate
    @user = User.find(params[:id])
    if @user.update_attribute(:approved, true)
    redirect_to "something"
    else
    render "something"
    end
    end

    您的路线
    match "users/:id/activate" => "users#activate", :as => "active_user"

    希望能帮到你。

    关于ruby-on-rails - Rails 3 如何使用 link_to 更改数据库中 bool 值的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13182661/

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