我仍然(对于那些以前帮助过我的人)在验证数据时遇到问题。
场景
我有两个模型-用户和住宿,每个用户有一个住宿(has\u one)。我可以使用current\u user访问登录的用户。
问题所在
当我在注册时验证用户时,一切正常,每个验证规则都会相应地显示验证错误消息。然而,我现在尝试在输入住宿时验证住宿,并得到一个Rails错误页面:
未知操作
找不到住宿控制器的操作“show”
但有趣的是,url已更改为/acculations//edit,似乎缺少住宿id的id(如果一切正常,我确实希望它改为编辑)。
我不认为这是验证规则本身,而是我如何处理重定向(老实说,这让我很困惑!)。如果数据通过验证规则,但不确定如何优雅地处理“非保存”,则数据会正确保存和重定向。
代码
住宿模式
class Accommodation < ActiveRecord::Base
belongs_to :user
#validation rules
validates :user_id, presence: true
validates :name, presence: true, length: { maximum: 50 }
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }, uniqueness: { case_sensitive: false }
end
/住宿/新建。html。雇员再培训局
...
<%= form_for :accommodation, url: accommodations_path do |f| %>
<% if @accommodation.errors.any? %>
<% @accommodation.errors.full_messages.each do |msg| %>
<p class="error"><%= msg %></p>
<% end %>
<% end %>
...
住宿控制器(感谢@Depa对此的帮助)
...
def index
if current_user.accommodation.present?
redirect_to edit_accommodation_path(current_user.accommodation)
else
redirect_to new_accommodation_path(current_user.accommodation)
end
end
def new
@accommodation = Accommodation.new
end
def create
current_user.create_accommodation(accommodation_params)
flash[:success] = "Accommodation details added"
redirect_to edit_accommodation_path(current_user.accommodation)
end
def edit
end
def update
if @accommodation.update(accommodation_params)
flash[:success] = "Accommodation details updated successfully"
redirect_to edit_accommodation_path(@accommodation)
else
flash[:error] = "Accommodation details could not be updated"
render 'edit'
end
end
private
def accommodation_params
params.require(:accommodation).permit(:name, :email)
end
...
在进入创建时是否实际设置了住宿参数?我希望您需要使用params或params[:住宿]。
否则,create\u accountation调用将失败,这意味着当前用户将失败。住宿将为零,这很可能会导致您的错误。
要优雅地处理失败的验证,请执行以下操作:
def create
@accommodation = current_user.build_accommodation(accommodation_params)
if @accommodation.save
flash[:success] = "Accommodation details added"
redirect_to edit_accommodation_path(current_user.accommodation)
else
flash.now.notice = "Error creating accommodation"
render "new"
end
end
我对仅使用bcrypt的用户名和密码的用户注册验证有特定要求(没有设计!) 我目前正在工作: 我需要: 用户名: 只能包含字母、数字、短划线和下划线 必须至少包含一个大写字母、一个特殊字符、一个数字和一个小写字母
我刚刚更新到rails 4.0.2,我收到了这个警告: [已弃用]我18n.enforce_available_locales将来会默认为true。如果您真的想跳过区域设置的验证,您可以设置I18n.enforce_available_locales=false以避免此消息。 将其设置为false是否存在任何安全问题?
问题内容: 我正在使用Rails做一个单页应用程序。登录和注销时,使用ajax调用Devise控制器。我遇到的问题是当我1)登录2)退出然后再次登录时不起作用。 我认为这与CSRF令牌有关,该令牌在我退出时会重置(尽管它不应该出现),并且由于它是单页的,因此在xhr请求中发送了旧的CSRF令牌,从而重置了会话。 更具体地说,这是工作流程: 登入 登出 登录(成功201。但是在服务器日志中打印) 后
我有一个带有浮动字段和精度验证的模型。当验证失败但不起作用时,我想显示我自己的自定义错误消息。 根据Rails Gudes的说法,“:消息选项允许您指定验证失败时将添加到错误集合中的消息。当不使用此选项时,活动记录将为每个验证助手使用相应的默认错误消息。:消息选项接受字符串或程序。” 我完全按照这里的例子来做,但它不起作用。 我做错了什么? 这就是我到目前为止学到的。我在测试中将价格设置为空,现在
问题内容: 我想知道如何将node.js集成到Rails应用程序中(出于学习目的)。 基于Michael Hartl教程(http://railstutorial.org/),我实现了带有Rails的基本Twitter克隆,并希望实时获得用户微博,而无需使用彗星或剑圣。(该应用程序托管在heroku上) 目前,我仅看到node.js框架(http://howtonode.org/grasshopp
问题内容: 我使用在WWDC上获得的光盘升级到了雪豹。 现在尝试运行我的一些Rails应用程序会抱怨sql 我本可以发誓我曾经修复过这个问题。问题是 不起作用并给出错误: 有没有人得到mysql在雪豹上使用Rails呢?如果是这样,您的设置是什么,更好的是,我该怎么做才能重现它? 问题答案: 我经历了同样的痛苦…这对我有用: 从mysql.com下载/安装64位MySQL 5.1.37 运行以下命