【问题标题】:ActionView Crashes when i chage the value of a checkbox当我更改复选框的值时,ActionView 崩溃
【发布时间】:2011-05-29 02:01:47
【问题描述】:

取消选中完整时间框后单击更新时,我得到以下信息。如果我注释掉复选框,它不会发生,但如果我用单选按钮替换相同的东西。

Users#update 中的 NoMethodError

显示第 26 行出现的 app/views/users/_form.erb:

当你没想到时,你有一个 nil 对象! 您可能期望有一个 Array 的实例。 评估 nil.map 时发生错误

提取的源代码(第 26 行附近):

23:   <p>
24:     <%= form.label :manager %>
25:     <%#= collection_select( :user , :manager_id, @managers, :id, :full_name, {},{}) %>
26:     <%= form.collection_select(:manager_id, @managers, :id, :full_name, {},{}) %>
27:   </p>
28:   <p>
29:     <%= form.label :groups %>

完整源码

模板:

<% form_for @user, :url => user_path(@user) do |f| %>
  <%= f.error_messages %>
  <%= render :partial => "form", :object => f %>
  <%= f.submit "Update" %>
<% end %>

部分:

   <p>
    <%= form.label :login %><br />
    <%= form.text_field :login %>
  </p>
  <p>
    <%= form.label :first_name %><br />
    <%= form.text_field :first_name %>
  </p>
  <p>
    <%= form.label :last_name %><br />
    <%= form.text_field :last_name %>
  </p>
  <p>
    <%= form.label :rate %><br />
    <%= form.text_field :rate %>
  </p>
  <p>
    <%= form.label :full_time %><br />
    <%= form.check_box :full_time %>
  </p>
  <p>
    <%= form.label :manager %>
    <%#= collection_select( :user , :manager_id, @managers, :id, :full_name, {},{}) %>
    <%= form.collection_select(:manager_id, @managers, :id, :full_name, {},{}) %>
  </p>
  <p>
    <%= form.label :groups %>
    <%= form.collection_select(:group_ids, @groups, :id, :name, {}, {:multiple => true, :size => 15}) %>
  </p>

然后是我的控制器

 def update
    @user = User.find(params[:id])

    respond_to do |format|
      if @user.update_attributes(params[:user])
        flash[:notice] = 'User was successfully updated.'
        format.html { redirect_to(@user) }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @user.errors, :status => :unprocessable_entity }
      end
    end



end

  def new
    @user = User.new
    @managers = Group.find_by_name('management').users
    @groups = Group.all

    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @user }
    end


 end

  # GET /users/1/edit
  def edit
    @user = User.find(params[:id])
    @managers = Group.find_by_name('management').users
    @groups = Group.all
  end

【问题讨论】:

  • 具体在哪里?这是来自 UsersController 的代码

标签: ruby-on-rails ruby actionview form-helpers


【解决方案1】:

必须在模型级别对 full_time 属性进行验证

【讨论】:

    猜你喜欢
    • 2016-06-20
    • 2019-03-04
    • 1970-01-01
    • 2017-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    • 1970-01-01
    相关资源
    最近更新 更多