gpt4 book ai didi

ruby-on-rails - Rails link_to 从 Controller 操作更新属性

转载 作者:行者123 更新时间:2023-12-04 23:21:38 24 4
gpt4 key购买 nike

我希望能够有一个链接,当按下时更新一个基于 Controller Action 的属性。我怎么能做到这一点?我是否必须创建单独的更新路由?我是新手,所以请耐心等待。

Controller

def completed
@meeting = Meeting.find(params[:id])
if @meeting.day_of_meeting == @meeting.days
@meeting.update_attribute(:day_of_meeting, '1')
redirect_to :back
else
@meeting.increment!
redirect_to :back
end
end

模型
def increment!
update_attribute(:day_of_meeting, day_of_meeting + 1)
end

看法
<%= link_to meetings_completed_path(@meeting), remote: true do %>

路线
resources :meetings do
get 'meetings/completed'
end

最佳答案

您的代码有几个问题

  • 由于您正在更新记录,因此您需要包含 method: :patch在您的链接中,您还需要修改路由文件以包含适当的路由。

    在你的路由文件中添加
    #routes.rb
    resources :meetings do
    member do
    patch 'completed'
    end
    end

    在你看来
    <%= link_to "Mark as completed", completed_meeting_path(@meeting), remote: true, method: :patch  %>
  • 既然你有 remote:true在您的链接中,因此 rails 将尝试呈现 javascript 模板,并且由于您没有呈现 javascript 模板,因此您将收到模板丢失错误

    在您的 Controller 中
    def completed
    @meeting = Meeting.find(params[:id])
    respond_to do |format|
    # if something ...
    # update meeting record and then render js template
    format.js {render :status => :ok} # it will render completed.js.erb inside 'app/views/meetings/' directory
    # else
    # something else
    format.js {render :action => "different_action"} # it will render different_action.js.erb inside 'app/views/meetings/' directory
    end
    end

  • 现在您需要做的就是在 js 模板中编写一些基本的 javascript 来更新 View 。

    注意:如果你不想渲染任何东西,只需使用 format.js { render :nothing => true } .
    另外如果你想使用 redirect_to调用而不是渲染 js 模板只是删除 remote: true形成你的链接。

    关于ruby-on-rails - Rails link_to 从 Controller 操作更新属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24275717/

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