【问题标题】:Rails: Spaces in string used for name causes validation errorRails:用于名称的字符串中的空格导致验证错误
【发布时间】:2014-09-10 05:08:20
【问题描述】:

我有一个用户组表,其中包含在创建组时输入的 group_name 值。如果组名中有空格,例如“Team Lol”,仍然会创建组名,但不会分配给当前用户,并且会在控制器中的 if/else 语句中抛出错误消息。代码如下:

控制器:

def create
    @group = current_user.create_user_group(group_params)
    current_user.user_group = @group
    current_user.save
    if @group.valid?
        redirect_to '/user_groups/'+@group.group_name, :notice => "Your group has been created"
    else
        redirect_to '/user_groups/', :error => "Error: group name may already be taken. Search, or try a new name."
    end
end

型号

class UserGroup < ActiveRecord::Base

has_many :users

has_secure_password
validates :password, :presence => true

validates :group_name, :presence => true, :uniqueness => true

before_validation :strip_blanks

def strip_blanks
  self.group_name = self.group_name.strip
end

创建表单:

<div class="form-group">
    <label for="Group Name">Enter group name</label>
    <%= f.input :group_name, :required => true, :autofocus => true, :maxlength => 40, :input_html => { :class => "form-control" }, :label => false, :placeholder => "Group name" %>
</div>
<div class="form-group">
    <label for="Password">Password</label>
    <%= f.input :password, :required => true, :autofocus => true, :maxlength => 40, :input_html => { :class => "form-control" }, :label => false, :placeholder => "Group password" %>
</div>
    <%= f.button :submit, :class => "btn btn-md btn-warning" %>
</div>

【问题讨论】:

  • 请发布您的错误信息。
  • 没有来自 rails 的错误消息,页面加载并运行我的 if/else 语句的这一部分:else redirect_to '/user_groups/', :error => "错误:组名可能已经被占用. 搜索,或尝试一个新名称。结束
  • 你能发布你在用户模型上设置组关联的方式吗?我相信您的代码会尝试保存组两次(一次通过 create_user_group 调用,一次通过用户保存)。
  • class User
  • 查看我的日志输出,我认为你是正确的 Lazarus。我看到应用程序创建了组,将其保存给用户,然后尝试再次创建组,看到它已经创建,并抛出错误。可能是什么来源?

标签: ruby-on-rails forms validation model


【解决方案1】:

我认为这是因为您已经在这一行中创建了组:

@group = current_user.create_user_group(group_params)

然后,您在此处分配(Rails 尝试再次创建它):

current_user.user_group = @group current_user.save

我认为您应该删除最后两个调用,因为如果 @group = current_user.create_user_group(group_params)

成功,则该组有效。接下来的操作是重定向到那里。

免责声明:这不是我的想法

【讨论】:

    【解决方案2】:

    我刚刚知道了 - 这是一个 URI 问题。 创建带有空格的名称时,用户被路由到 /user_groups/The A Team。

    我的路由是 /user_groups/:group_name 路由到该组的主页。 但是,由于这些空间未正确注册,因此该应用似乎运行另一个 POST 请求来创建组。

    我只是将重定向更改为 redirect_to '/user_groups/'+@group.group_name.gsub(/\s/,'%20'), :notice => "Your group has been created" 如果您认为我的处理方式有任何问题,请告诉我。

    感谢大家的帮助, 丹尼尔

    【讨论】:

      猜你喜欢
      • 2023-03-10
      • 2012-01-14
      • 2019-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多