ruby-on-rails – Rails link_to从控制器动作更新属性
发布时间:2020-12-17 03:41:12 所属栏目:百科 来源:网络整理
导读:我希望能够有一个链接按下时根据控制器动作更新一个属性.我怎么能这样做?我是否必须创建单独的更新路由?我是新来的,所以请耐心等待. 调节器 def completed @meeting = Meeting.find(params[:id]) if @meeting.day_of_meeting == @meeting.days @meeting.up
我希望能够有一个链接按下时根据控制器动作更新一个属性.我怎么能这样做?我是否必须创建单独的更新路由?我是新来的,所以请耐心等待.
调节器 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 解决方法
您的代码有几个问题
>由于您要更新记录,因此需要在链接中包含方法:: patch,并且还需要修改routes文件以包含适当的路径. 在您的路线文件中添加 #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模板,你会得到一个模板缺失错误 在你的控制器中 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来更新视图. 注意:如果您不想渲染任何内容,只需使用format.js {render:nothing =>真的}.此外,如果您想使用redirect_to调用而不是渲染js模板,只需删除您链接的remote:true表单. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |