我正准备抓住铁轨上的红宝石和红宝石。我有链接在两个状态之间切换对象 - 拒绝和批准。目前它们是两个独立的链接。这是控制器中拒绝方法的一个例子
def toggle_reject_field
@entry.reject!
respond_to do |format|
format.html { redirect_to request.referer }
format.json { head :no_content }
format.js
end
end
以及调用它的链接
link_to "Reject", (toggle_reject_field_admin_entry_path(photo, params.except(:controller, :action))), :remote => true
我对批准链接基本相同。但在Ruby中肯定有更多的语法,友好的方式实现这一点 - 更干燥的东西。
所以我的赌注是通过拒绝'或者'批准'每个链接中的文章都指向相同的控制器方法,但我似乎无法使其正常工作。
这是我的链接
link_to "Approve", (toggle_field_admin_entry_path(photo, params.except(:controller, :action), 'approve')), :remote => true
def toggle_field(object)
if object == "approve"
@entry.approve!
else
@entry.reject
end
respond_to do |format|
format.html { redirect_to request.referer }
format.json { head :no_content }
format.js
end
end
当我点击它时它什么都不做,没有动作。首先,我如何让这个工作?其次,我是否以正确的方式思考这个问题?就像在我做这样的事情一样?
2.1.0 :0 > def stats(object)
2.1.0 :0> "hello #{object}"
2.1.0 :0> end
=> :stats
2.1.0 :0 > puts stats('bill')
hello bill
更新:我已尝试按照Yoshi先生发布的内容实施某些内容,但它既不起作用也不回答我的问题。任何人都可以帮忙澄清一下吗?
答案 0 :(得分:1)
以下是我们在这些情况下通常采取的措施:
# routes.rb
resources :entries do
get :toggle_field, on: :member # make sure to place this in the right namespace (ex: `/admin` )
end
# anchor tag
link_to 'toggle State', toggle_field_entry_path(entry.id)
# Entries Controller
def toggle_field
@entry = Entry.find(params[:id])
@entry.toggle_state.save
respond_to do |format|
format.html { redirect_to path_to_your_resource_edit_page }
format.json { state: @entry.state }
end
end
# Entry Model
def toggle_state
self.state = (self.state == 'approve') ? 'reject' : 'approve'
end
如果您希望拒绝默认设置(如果entry.state
为nil
),请按照以下步骤撤消测试:
# Entry Model
def toggle_state
self.state = (self.state == 'reject') ? 'approve' : 'reject' # if state.nil? || state == 'reject' ; set state to 'approve'
end