Ruby 如何解决未定义的方法'permit';for:user:ror-4中的符号错误

Ruby 如何解决未定义的方法'permit';for:user:ror-4中的符号错误,ruby,ruby-on-rails-3,ruby-on-rails-4,Ruby,Ruby On Rails 3,Ruby On Rails 4,请帮助我解决此错误。当更新操作执行时,将显示此错误 错误: NoMethodError in UsersController#update undefined method `permit' for :user:Symbol 下面给出了我的代码片段 views/users/edit.html.erb <h1>Edit your data</h1> <%= form_for @user,:url => {:action => 'update',:id =

请帮助我解决此错误。当更新操作执行时,将显示此错误

错误:

NoMethodError in UsersController#update
undefined method `permit' for :user:Symbol
下面给出了我的代码片段

views/users/edit.html.erb

<h1>Edit your data</h1>
<%= form_for @user,:url => {:action => 'update',:id => params[:id]} do |f| %>
    <% if @user.errors.any? %>
        <div id="error_explanation">
          <h2><%= pluralize(@user.errors.count, "error") %> prohibited this post from being saved:</h2>

          <ul>
            <% @user.errors.full_messages.each do |message| %>
                <li><%= message %></li>
            <% end %>
          </ul>
        </div>
    <% end %>
    <%= f.text_field:name,:value => @edit.name %>
    <%= f.email_field:email,:value => @edit.email %>
    <%= f.text_field:message,:value => @edit.message %>
    <%= f.submit "Update" %>
<% end %>
<%= link_to "Back",users_index_path %>
class UsersController < ApplicationController
  def index

  end
  def new
    @user=User.new
  end
  def create
    @user=User.new(users_params)
    if @user.save
      flash[:notice]="Your data is saved succesfully"
      flash[:color]="valid"
      redirect_to :action => 'index'
    else
      flash[:alert]="You are entering wrong data"
      flash[:color]="invalid"
      render :new
    end
  end
  def show
    @user=User.all
  end
  def delete
   @user=User.find(params[:id])
    if @user.delete
      flash[:notice]=@user.name+"has deleted successfully"
      flash[:color]="valid"
      redirect_to :action => 'index'
    else
      flash[:alert]=@user.name+"could not delete.Please check it.."
      flash[:color]="invalid"
      render :show
    end
  end
  def edit
    @edit=User.find(params[:id])
    @user=User.new
  end
  def update
    @user=User.find(params[:id])
    if @user.update_attributes(update_params)
      flash[:notice]="Your data has updated successfully"
      flash[:color]="valid"
      redirect_to :action => 'index'
    else
      flash[:alert]="Your data could not update..check it.."
      flash[:color]="invalid"
      render :edit

    end
  end
  private
  def users_params
    params.require(:user).permit(:name, :email, :message,pets_attributes: [:name, :email,:message])
  end
  def update_params
    params.require (:user).permit(:name,:email,:message,pets_attributes: [:name, :email,:message])
  end
end
class User < ActiveRecord::Base
  has_many :pets
  accepts_nested_attributes_for :pets
  EMAIL_REGEX = /\A[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\z/i
  validates :name,  :presence => true,:length => { :minimum => 5 }
  validates :email, :presence => true, :uniqueness => true, :format => EMAIL_REGEX
  validates :message,  :presence => true
end
编辑您的数据
{:action=>update',:id=>params[:id]}do | f |%>
禁止保存此帖子:
@edit.name%> @编辑电子邮件%> @edit.message%>
控制器/用户\u控制器.rb

<h1>Edit your data</h1>
<%= form_for @user,:url => {:action => 'update',:id => params[:id]} do |f| %>
    <% if @user.errors.any? %>
        <div id="error_explanation">
          <h2><%= pluralize(@user.errors.count, "error") %> prohibited this post from being saved:</h2>

          <ul>
            <% @user.errors.full_messages.each do |message| %>
                <li><%= message %></li>
            <% end %>
          </ul>
        </div>
    <% end %>
    <%= f.text_field:name,:value => @edit.name %>
    <%= f.email_field:email,:value => @edit.email %>
    <%= f.text_field:message,:value => @edit.message %>
    <%= f.submit "Update" %>
<% end %>
<%= link_to "Back",users_index_path %>
class UsersController < ApplicationController
  def index

  end
  def new
    @user=User.new
  end
  def create
    @user=User.new(users_params)
    if @user.save
      flash[:notice]="Your data is saved succesfully"
      flash[:color]="valid"
      redirect_to :action => 'index'
    else
      flash[:alert]="You are entering wrong data"
      flash[:color]="invalid"
      render :new
    end
  end
  def show
    @user=User.all
  end
  def delete
   @user=User.find(params[:id])
    if @user.delete
      flash[:notice]=@user.name+"has deleted successfully"
      flash[:color]="valid"
      redirect_to :action => 'index'
    else
      flash[:alert]=@user.name+"could not delete.Please check it.."
      flash[:color]="invalid"
      render :show
    end
  end
  def edit
    @edit=User.find(params[:id])
    @user=User.new
  end
  def update
    @user=User.find(params[:id])
    if @user.update_attributes(update_params)
      flash[:notice]="Your data has updated successfully"
      flash[:color]="valid"
      redirect_to :action => 'index'
    else
      flash[:alert]="Your data could not update..check it.."
      flash[:color]="invalid"
      render :edit

    end
  end
  private
  def users_params
    params.require(:user).permit(:name, :email, :message,pets_attributes: [:name, :email,:message])
  end
  def update_params
    params.require (:user).permit(:name,:email,:message,pets_attributes: [:name, :email,:message])
  end
end
class User < ActiveRecord::Base
  has_many :pets
  accepts_nested_attributes_for :pets
  EMAIL_REGEX = /\A[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\z/i
  validates :name,  :presence => true,:length => { :minimum => 5 }
  validates :email, :presence => true, :uniqueness => true, :format => EMAIL_REGEX
  validates :message,  :presence => true
end
class UsersController“index”
其他的
flash[:alert]=“您输入了错误的数据”
闪光[:颜色]=“无效”
渲染:新
结束
结束
def秀
@user=user.all
结束
def删除
@user=user.find(参数[:id])
如果@user.delete
flash[:notice]=@user.name+“已成功删除”
闪光[:颜色]=“有效”
重定向到:action=>“index”
其他的
flash[:alert]=@user.name+“无法删除。请检查..”
闪光[:颜色]=“无效”
渲染:显示
结束
结束
定义编辑
@edit=User.find(参数[:id])
@user=user.new
结束
def更新
@user=user.find(参数[:id])
如果@user.update_属性(update_参数)
flash[:注意]=“您的数据已成功更新”
闪光[:颜色]=“有效”
重定向到:action=>“index”
其他的
flash[:alert]=“您的数据无法更新..请检查..”
闪光[:颜色]=“无效”
渲染:编辑
结束
结束
私有的
def用户参数
参数require(:user).permit(:name,:email,:message,pets_属性:[:name,:email,:message])
结束
def更新参数
params.require(:user).permit(:name,:email,:message,pets_属性:[:name,:email,:message])
结束
结束
型号/用户.rb

<h1>Edit your data</h1>
<%= form_for @user,:url => {:action => 'update',:id => params[:id]} do |f| %>
    <% if @user.errors.any? %>
        <div id="error_explanation">
          <h2><%= pluralize(@user.errors.count, "error") %> prohibited this post from being saved:</h2>

          <ul>
            <% @user.errors.full_messages.each do |message| %>
                <li><%= message %></li>
            <% end %>
          </ul>
        </div>
    <% end %>
    <%= f.text_field:name,:value => @edit.name %>
    <%= f.email_field:email,:value => @edit.email %>
    <%= f.text_field:message,:value => @edit.message %>
    <%= f.submit "Update" %>
<% end %>
<%= link_to "Back",users_index_path %>
class UsersController < ApplicationController
  def index

  end
  def new
    @user=User.new
  end
  def create
    @user=User.new(users_params)
    if @user.save
      flash[:notice]="Your data is saved succesfully"
      flash[:color]="valid"
      redirect_to :action => 'index'
    else
      flash[:alert]="You are entering wrong data"
      flash[:color]="invalid"
      render :new
    end
  end
  def show
    @user=User.all
  end
  def delete
   @user=User.find(params[:id])
    if @user.delete
      flash[:notice]=@user.name+"has deleted successfully"
      flash[:color]="valid"
      redirect_to :action => 'index'
    else
      flash[:alert]=@user.name+"could not delete.Please check it.."
      flash[:color]="invalid"
      render :show
    end
  end
  def edit
    @edit=User.find(params[:id])
    @user=User.new
  end
  def update
    @user=User.find(params[:id])
    if @user.update_attributes(update_params)
      flash[:notice]="Your data has updated successfully"
      flash[:color]="valid"
      redirect_to :action => 'index'
    else
      flash[:alert]="Your data could not update..check it.."
      flash[:color]="invalid"
      render :edit

    end
  end
  private
  def users_params
    params.require(:user).permit(:name, :email, :message,pets_attributes: [:name, :email,:message])
  end
  def update_params
    params.require (:user).permit(:name,:email,:message,pets_attributes: [:name, :email,:message])
  end
end
class User < ActiveRecord::Base
  has_many :pets
  accepts_nested_attributes_for :pets
  EMAIL_REGEX = /\A[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\z/i
  validates :name,  :presence => true,:length => { :minimum => 5 }
  validates :email, :presence => true, :uniqueness => true, :format => EMAIL_REGEX
  validates :message,  :presence => true
end
class用户true,:length=>{:minimum=>5}
验证:email,:presence=>true,:university=>true,:format=>email\u REGEX
验证:message,:presence=>true
结束

请帮助我解决上述错误。

您在
require
(:user)
之间有空格。您当前的代码相当于:

def update_params
  params.require(:user.permit(:name,:email,:message,pets_attributes: [:name, :email,:message]))
end
正如您现在看到的,您在
:user
符号上调用
permit
方法,这是导致错误的直接原因

应该是:

  def update_params
    params.require(:user).permit(:name,:email,:message,pets_attributes: [:name, :email,:message])
  end
顺便说一句,有两种方法做完全相同的事情是毫无意义的。

检查您的问题:

you have a space after require and before (:user) 
尝试:

要获得更好的方法,您可以只使用一种方法:

def user_params
   params.require(:user).permit(:name,:email,:message,
     pets_attributes: [:name, :email,:message])
end
您可以只使用一个方法,并在“新建”和“编辑”中重复使用该方法,而不是为“新建”和“编辑”使用单独的筛选方法


保持干爽。

@subhra我的回答有帮助吗?过去几周你问了很多问题,但你还没有接受一个答案。要成为StackOverflow社区的一员,您需要投票选出好的答案,并接受对您的问题最有帮助的答案(如果有的话)。请阅读帮助中心了解更多信息。