通过链接将参数传递给rails Simple中的自定义方法

时间:2014-07-16 21:13:51

标签: ruby-on-rails ruby

我正准备抓住铁轨上的红宝石和红宝石。我有链接在两个状态之间切换对象 - 拒绝和批准。目前它们是两个独立的链接。这是控制器中拒绝方法的一个例子

  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先生发布的内容实施某些内容,但它既不起作用也不回答我的问题。任何人都可以帮忙澄清一下吗?

1 个答案:

答案 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.statenil),请按照以下步骤撤消测试:

# Entry Model
def toggle_state
  self.state = (self.state == 'reject') ? 'approve' : 'reject' # if state.nil? || state == 'reject' ; set state to 'approve'
end