:method
это не метод в вашем контроллере, а HTTP-глагол типа Get или Post. Вместо этого вы должны делать что-то вроде
<%= link_to "Approve Period", approve_path(:period => @approval_period) %>
и добавление Approve_path в Routes.rb как
match "/approve" => "controller#approve", :as => :approve
(Выше приведен один из способов добавления маршрута, вы можете узнать, как добавить более спокойные маршруты )
Прочитайте Маршрутизация с внешней стороны , чтобы узнать больше о маршрутизации.
Обновление:
@approval_period.update_attribute("period_id", period_id + 1)
Строка выше - это то, что выдает ошибку. Вы нигде не определили period_id
. Параметр, который приходит в params[:period]
.
Затем вы можете сделать это:
Подход 1
@approval_period = ApprovalPeriod.find(params[:period])
@approval_period.update_attribute("period_id", @approval.period_id + 1)
Подход 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
А в контроллере:
def approve
@approval_period = ApprovalPeriod.find(params[:period])
@approval_period.increment!
...
# Other code here
end
Иди со всем, что тебе подходит.