【问题标题】:Non Mass assignable field in view视图中的非质量可分配字段
【发布时间】:2013-10-17 02:26:38
【问题描述】:

我有点卡在这个问题上。尝试从管理员视图更新作业模型中的不可批量分配的属性。我需要一个按钮来触发管理控制器中的操作方法,它只是将作业的 isactive 值更改为 true。

在管理控制器中:

     def approve
    @job.update_attribute(:isactive = true)
    if @job.save
      redirect_to(:action => :show)
      flash[:notice] = "Job Approved"
    else
      render 'show'
    end
  end

在工作/1 个视图中

<div style="text-align:center;" class="widget">
<%= form_for(@job, :url => url_for(:controller => 'admin', :action => 'approve'), :html => {:id => "contact_form", :class => "g-form"}) do |f| %>

<%= button_tag( :class => "g-btn type_default") do %>
<i class="icon-share-alt icon-white"></i>Approve this job 
<% end %>
 <% end %>      
<% end %>   

无论我做什么,此表单都会提交到作业更新操作并显示作业已成功更新,而不是来自管理员批准操作的通知“作业已批准”。

我也添加了以下路线。但不确定我做错了什么。我需要一个简单的按钮(理想情况下,由于样式要求是一个块),它将作业的 isactive 字段设置为 true。

match "jobs/:id", :via=>:post, :controller=>"admin", :action=>"approve"

【问题讨论】:

    标签: ruby-on-rails link-to mass-assignment button-to


    【解决方案1】:

    批量分配旨在准确防止您在此处尝试执行的操作,因此理想情况下,如果您需要修改它,应将其添加到白名单 (attr_accessible)。

    但是,即使您将 isactive 属性列入白名单,您的控制器操作仍有一些问题需要解决。

    @job.update_attribute(:isactive = true) 无效。 update_attribute 不处理赋值,正确的语法是 update_attribute(attribute, value) 所以应该是:

    @job.update_attribute(:isactive, true)
    

    另外,update_attribute 方法在传递的对象上调用 save。在update_attribute 之后调用@job.save(假设没有其他代码分配属性)是多余的。

    编写此方法的更好方法是:

    def approve
      if @job.update_attribute(:isactive, true)
        redirect_to(:action => :show)
        flash[:notice] = "Job Approved"
      else
        render 'show'
      end
    end
    

    但是,如果您无法修改模型并且不担心回调或验证,您可以直接使用update_column(或Rails 4 中的update_columns)更新数据库列:

    def approve
      if @job.update_column(:isactive, true)
        redirect_to(:action => :show)
        flash[:notice] = "Job Approved"
      else
        render 'show'
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-02
      • 1970-01-01
      • 1970-01-01
      • 2018-08-06
      • 1970-01-01
      • 1970-01-01
      • 2012-12-25
      相关资源
      最近更新 更多