【问题标题】:update database on click点击更新数据库
【发布时间】:2013-06-04 09:23:40
【问题描述】:

嗨,当用户单击某个链接时,我正在尝试更新我的数据库 (PostgreSQL) 中的值,尽管我所拥有的工作正常,但我认为它不是最佳实践。如果有人可以展示我如何更好地实现这一目标,那就太好了

查看

%ul.button-group.round.even-3
          %li= link_to '<i class="general foundicon-checkmark"></i>'.html_safe, accept_availability_path(a), :method => 'put', :remote => true, :class => 'button success tiny', :id => a.id, :disable_with => ''

控制器

    def accept
    @availability = Availability.find(params[:id])
    @availability.available= true

    respond_to do |format|
      if @availability.update_attributes(params[:availability])
        format.html { render :nothing => true }
        format.js
      else
        format.html { render :action => "edit" }
        format.js
      end
    end
  end

路线

resources :availabilities do
    put 'accept', :on => :member
    put 'decline', :on => :member
  end

【问题讨论】:

    标签: ruby-on-rails routes haml


    【解决方案1】:

    你所做的并没有什么特别的问题。您的控制器不需要使用 update_attributes,您没有将任何属性传递给它。您可以将 save 更改为 .available

    def accept
      @availability = Availability.find(params[:id])
      @availability.available = true
    
      respond_to do |format|
        if @availability.save
          format.html { render :nothing => true }
          format.js
        else
          format.html { render :action => "edit" }
          format.js
        end
      end
    end
    

    你可以像这样整理你的路线:

    resources :availabilities do
      member do 
        put :accept 
        put :decline
      end
    end
    

    【讨论】:

    • 有没有更好的方法来使用链接/路由?
    • 它们看起来非常好。您的路线可以简化一点,更新答案。您的链接很好,link_to_remote 曾经是执行这些操作的方法,但在 rails 3 中已弃用,取而代之的是 :remote =&gt; true
    • 虽然我需要在我的链接中使用 :method =&gt; 'put' 吗?
    • 你确实这样做了,如果你不把它放在那里,link_to 默认为get,即使它是远程的。
    • @Paul'Whippet'McGuane 这对你有用吗?关于link_to 的更多详细信息可以在here 中找到——不过你已经正确使用了它:)
    猜你喜欢
    • 2017-06-05
    • 2017-01-27
    • 1970-01-01
    • 2022-01-18
    • 2014-01-17
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    相关资源
    最近更新 更多