我是Rails 4的新手。我创建了以下视图
contact_us.html.erb
<%= form_tag({controller: "pages", action: "contact_us"}, method: "post", class: "nifty_form") do %>
<b> Add Product </b>
<br>
<p>
<%= label_tag 'Cname:' %>
<%= text_field_tag 'cname', @cname %>
<br>
<%= label_tag 'Cdetail:' %>
<%= text_field_tag 'cdetais', @cdetais %>
<% #email_field_tag 'pdetail', @pdetail %>
</p>
<%= submit_tag "Save" %>
<% end %>
型号:contactu.rb
class Contactu < ActiveRecord::Base
end
pages_controller.rb
class PagesController < ApplicationController
def index
end
def contact_us
flash.now[:error] = ""
if params[:commit]
@cname=params[:cname]
@cdetais=params[:cdetais]
flash.now[:error] << "Pname cannot be blank<br/>" if @cname.nil? || @cname.empty?
flash.now[:error] << "Cdetais cannot be blank<br/>" if @cdetais.nil? || @cdetais.empty?
end
Contactu.create(cname: @cname, cdetais: @cdetais)
end
end
此代码有效。但是,我想知道有更好的方法吗?
我已经更改了代码,但现在它说了 对于#
,未定义的方法“join”@contact_us = Contactu.create(cname: @cname, cdetais: @cdetais)
if @contact_us.save
flash.now[:notice] << "Information saved </br>"
else
flash.now[:error] = @contact_us.errors.join('<br>')
end
答案 0 :(得分:1)
当然有更好的方法。
首先检查模型中是否存在给定字段:
class Contactu < ActiveRecord::Base
validate :cname, presence: true
validate :cdetails, presence: true
end
然后在你的控制器中:
@message = Contactu.create(params.permit(:cname, :cdetails))
if @message.save
redirect_to blah, notice: "Thank's for the news"
else
flash[:error] = @message.errors.to_a.join('<br>')
end
答案 1 :(得分:0)
我可能会创建一个新的控制器和联系路由。
ContactController
def index
...
def create
# on success go to index
路线:
Resources contact, only: [:index, :create]
表单:使用路径助手:
form_for **contact_path** ...
如果您希望链接成为/ pages的一部分,那么也可以使用routes文件完成。
答案 2 :(得分:0)
确实,请参阅:
http://guides.rubyonrails.org/getting_started.html#saving-data-in-the-controller
但更好的是,RTFM,从本教程的开头开始; - )
def create
@article = Article.new(params[:article])
@article.save
redirect_to @article
end