Ruby on rails 正在尝试验证联系人表单

Ruby on rails 正在尝试验证联系人表单,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我是rails的新手,我正在尝试为联系人表单创建验证。我已经启动了验证代码,但是如果我只加载我的联系人页面并单击提交,它不会显示任何验证错误 以下是我的观点: <%= form_for :message, :id => 'contactForm', :url => { :action => "create" } do |f|-%> <%= label_tag 'name', 'Name:' %> <%= f.t

我是rails的新手,我正在尝试为联系人表单创建验证。我已经启动了验证代码,但是如果我只加载我的联系人页面并单击提交,它不会显示任何验证错误

以下是我的观点:

  <%= form_for :message, :id => 'contactForm', :url => { :action => "create" } do |f|-%>

        <%= label_tag 'name', 'Name:' %>
        <%= f.text_field 'name', :class =>'required requiredField' %> 

        <%= label_tag 'email', 'Email:' %>
        <%= f.email_field 'email', :class =>'required requiredField email' %>

        <%= label_tag 'message', 'Message:' %>
        <%= f.text_area 'message', :class => 'required requiredField', :rows => 20, :cols => 30 %>

        <%= f.submit :class => 'button' do -%>
            <a href="#" class="button" style="float:right;"><span>Submit</span></a>
        <% end %>
    <% end -%>
路线:

get "contact/index"
post "contact/create"

您正在将表单发回:index操作,但在:index操作中没有您试图创建和保存ContactModel实例的位置。在你这么做之前,它永远不会生效。您想在:索引操作中添加如下内容:

如果请求,请发邮件? cm=ContactModel.new(…参数转到此处…) 如果cm.save #一切都很好 其他的 #吐出错误 终止 结束

我建议不要将您的模型命名为“ContactModel”(去掉“model”)。联系人请求、联系人提交等。。。差不多吧

还有,看看。非常适用于你正在做的事情


最后,将form_标记切换为form_,并使用模型的新实例。始终保持整洁。

您将表单发回:index操作,但在:index操作中没有您试图创建和保存ContactModel实例的位置。在你这么做之前,它永远不会生效。您想在:索引操作中添加如下内容:

如果请求,请发邮件? cm=ContactModel.new(…参数转到此处…) 如果cm.save #一切都很好 其他的 #吐出错误 终止 结束

我建议不要将您的模型命名为“ContactModel”(去掉“model”)。联系人请求、联系人提交等。。。差不多吧

还有,看看。非常适用于你正在做的事情


最后,将form_标记切换为form_,并使用模型的新实例。始终保持事物的整洁。

我本人是Rails的新手,至今只学了一个月。如果我理解正确,您希望在提交表单时显示错误。我希望您的模型在没有正确值的情况下提交时不会保存到数据库中,因为您的模型中存在validates。您的表单中可能需要以下代码,就在标签的表单_下方。然后将显示任何验证错误

<% if @message.errors.any? %>
<h4>Errors</h4>
<ul>
    <% @message.errors.full_messages.each do |message| %>
        <li><%= message%></li>
    <% end %>
</ul>
<% end %>

错误

我自己也是Rails的新手——现在才学了一个月。如果我理解正确,您希望在提交表单时显示错误。我希望您的模型在没有正确值的情况下提交时不会保存到数据库中,因为您的模型中存在validates。您的表单中可能需要以下代码,就在标签的表单_下方。然后将显示任何验证错误

<% if @message.errors.any? %>
<h4>Errors</h4>
<ul>
    <% @message.errors.full_messages.each do |message| %>
        <li><%= message%></li>
    <% end %>
</ul>
<% end %>

错误

将routes.rb中的post行更改为

post 'contact/create'
get 'contact/new'

将routes.rb中的post行更改为

post 'contact/create'
get 'contact/new'

我看了那部电影,还有第219部。我还用我最新的代码更新了我的帖子。它仍然没有显示任何验证错误。我是否仍然需要像您告诉我的那样使用
if request.post?…
?我在两部电影中都没有看到这一点。此外,我是否需要在视图中添加一些内容,以便验证错误显示在那里?我查看了该屏幕以及219号屏幕。我还用我最新的代码更新了我的帖子。它仍然没有显示任何验证错误。我是否仍然需要像您告诉我的那样使用
if request.post?…
?我在两部电影中都没有看到这一点。此外,我是否需要在视图中放置一些内容,以便验证错误显示在那里?它不会将任何内容保存到数据库中,因为我的模型没有扩展ActiveRecord。我尝试了你的代码,但现在它抛出了一个错误:
当你没有预料到它时,你有一个nil对象!您可能希望有ActiveRecord::Base的实例。计算nil时出错。错误
@Catfish请尝试我的更新代码。视图中的activerecord似乎为nil。我在消息(您的活动记录)中使用了大写的M而不是小写的M,它没有将任何内容保存到数据库中,因为我的模型没有扩展活动记录。我尝试了你的代码,但现在它抛出了一个错误:
当你没有预料到它时,你有一个nil对象!您可能希望有ActiveRecord::Base的实例。计算nil时出错。错误
@Catfish请尝试我的更新代码。视图中的activerecord似乎为nil。我在message(您的活动记录)中使用了大写的M而不是小写的M,可能应该是(:message…还有您的config/routes.rb是什么样子的。我将其更改为:message,并在问题中添加了my routes.rb。可能应该是for的格式(:message…还有您的config/routes.rb是什么样子的。我将其更改为:message,并将我的routes.rb添加到问题中。我已在视图中更新了我的routes和表单_,现在我收到以下错误:
缺少模板联系人/new,application/new,带有{:handlers=>[:erb,:builder,:coffee],:formats=>[:html],:locale=>[:en,:en]}.
为什么它不能识别我的ContactController中的这一行
布局“内容”
。您是否有文件
app/view/layouts/content.erb.html
?该文件中的某个地方调用了
yield
?更改路由时,您可能还需要重新启动Web服务器。rb.我已尝试重新启动服务器,是的,我有一个layouts/content.html.erb文件调用yield。这一行是杀手
render:action=>'new'
因为我想显示相同的视图。我已经在视图中更新了我的路由和我的表单,现在我得到了这个错误
缺少模板联系人/new,application/new,带有{:handlers=>[:erb,:builder,:coffee],:formats=>[:html],:locale=>[:en,:en]}.
为什么它不能识别我的ContactController
版面“内容”中的这一行呢?
你有文件
app/view/layouts/content.erb.html
?文件中的某个地方有一个调用
yield
?你可能还需要休息