【问题标题】:Create action to change boolean value in Rails 3在 Rails 3 中创建操作以更改布尔值
【发布时间】:2012-08-01 12:34:01
【问题描述】:

我的 Rails 3 应用程序中有一个简单的建议模型。我正在尝试在索引视图上添加一个简单的 link_to 链接,单击该链接会将建议标记为已批准。

到目前为止,我有以下代码:

routes.rb

resources :suggestions do
 get :approve
end

suggestions_controller.rb

def approve
 @suggestion = Suggestion.find(params[:id])
 @suggestion.update_attribute(:approved, 'true')
 @suggestion.update_attribute(:approved_on, Time.now)
 redirect_to suggestion_path
end

suggestion.rb

attr_accessible :author, :details, :localip, :title, :approved, :approved_on

schema.rb

create_table "suggestions", :force => true do |t|
 t.string   "title"
 t.string   "author"
 t.text     "details"
 t.string   "localip"
 t.datetime "created_at",                     :null => false
 t.datetime "updated_at",                     :null => false
 t.boolean  "approved",    :default => false
 t.datetime "approved_on"
end

index.html.erb(建议)

<% if @suggestion.approved? %>
    <%= @suggestion.approved_on %>
<% else %>
    Not yet approved. (<%= link_to "Approve", approve_suggestion_url(@approve), :method => :put %>)
<% end %>

使用上述代码时,我得到以下异常错误:

undefined method `approved?' for nil:NilClass

我是不是错过了什么地方?

【问题讨论】:

    标签: ruby-on-rails-3 methods controller routes link-to


    【解决方案1】:

    很可能,您发布的代码位于每个循环中

    <% @suggestions.each do |suggestion| %>
      ...
      <% if @suggestion.approved? %>
        <%= @suggestion.approved_on %>
      <% else %>
        Not yet approved. (<%= link_to "Approve", approve_suggestion_url(@approve), :method => :put %>)
      <% end %>
    <% end %>
    

    您需要使用suggestion 变量而不是@suggestion 实例变量。此外,要构建建议批准 url,您需要使用 suggestion 而不是 @approve。代码应该是这样的

      <% if suggestion.approved? %>
        <%= suggestion.approved_on %>
      <% else %>
        Not yet approved. (<%= link_to "Approve", approve_suggestion_url(suggestion), :method => :put %>)
      <% end %>
    

    此外,您应该修改您的 routes.rb 以反映 approve 操作是成员操作。

    resources :suggestions do
      put :approve, on: :member
    end
    

    要了解成员路由和集合路由之间的区别,请阅读difference between collection route and member route in ruby on rails?

    【讨论】:

    • 啊,谢谢,愚蠢的错误!尽管No route matches [PUT] "/suggestions/8/approve" 我似乎遇到了路由错误
    • 如果你想保持方法在链接生成中,然后修改 routes.rb 为put :approve, on: :member
    猜你喜欢
    • 2011-10-30
    • 1970-01-01
    • 2016-03-01
    • 2012-10-22
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    相关资源
    最近更新 更多