我有一个观点:
<h2>The current billing period is <%= @current_period %></h2>
<h2>The current period approved is <%= @approval_period %></h2>
<h2><%= link_to "Approve Period", :method => :approve, :id => @approval_period %></h2>
Run Code Online (Sandbox Code Playgroud)
和一个控制器:
def approval_period
@current_period = PeriodCounter.first.period.pe_number
@approval_period = ApprovalPeriod.first.period.pe_number
end
def approve
@approval_period = ApprovalPeriod.first.period_id
@approval_period.update_attribute("period_id", period_id + 1)
@approval_period.save
redirect_to :back
flash[:notice] = "Approval Period Updated."
end
Run Code Online (Sandbox Code Playgroud)
我正在尝试更新数据库,以便在点击链接时将@approval_period增加1.我已经离开Rails很长一段时间了,所以我知道我错过了一些关键元素.有帮助吗?提前致谢...
:method不是控制器中的方法,而是HTTP动词,如Get或Post.相反,你应该做的事情
<%= link_to "Approve Period", approve_path(:period => @approval_period) %>
Run Code Online (Sandbox Code Playgroud)
并在routes.rb中添加approve_path为
match "/approve" => "controller#approve", :as => :approve
Run Code Online (Sandbox Code Playgroud)
(以上是添加路线的一种方法,您可以学习如何添加更多的宁静路线)
从Outside In读取Rails路由以了解有关路由的更多信息.
更新:
@approval_period.update_attribute("period_id", period_id + 1)
Run Code Online (Sandbox Code Playgroud)
上面的行是抛出错误的原因.你没有period_id在任何地方定义.来的参数是params[:period].
然后,你可以这样做:
方法1
@approval_period = ApprovalPeriod.find(params[:period])
@approval_period.update_attribute("period_id", @approval.period_id + 1)
Run Code Online (Sandbox Code Playgroud)
方法2
在一个方法中抽象出来:
class ApprovalPeriod < AR::Base
def increment!
# Here 'period_id' is valid since it is an attribute and a method
# with that name will be available
update_attribute(:period_id, period_id + 1)
end
end
Run Code Online (Sandbox Code Playgroud)
在控制器中:
def approve
@approval_period = ApprovalPeriod.find(params[:period])
@approval_period.increment!
...
# Other code here
end
Run Code Online (Sandbox Code Playgroud)
随身携带任何套房.