Rails通过模型添加空条目

时间:2013-05-31 09:56:13

标签: ruby-on-rails ruby-on-rails-3

我是ruby的新手,试图按照官方文档创建一个基本表单来创建帖子:

<%= form_for @post, :url => { :action => "create" }, :html => {:class => "nifty_form"} do |f| %>
  <%= f.text_field :title %>
  <%= f.text_area :entry, :size => "60x12" %>
  <%= f.submit "Create" %>
<% end %>

表单是成功添加一个条目到数据库,但是一个空的,我想我必须在控制器中丢失一些东西?我需要以某种方式传递变量吗?

def create
@post = Main.create
end

3 个答案:

答案 0 :(得分:1)

基本的创建操作可能如下所示。您首先初始化一个新帖子。根据是否成功保存,您可以继续。

# app/controllers/posts_controller.rb
class PostsController < ActionController::Base
  def create
    @post = Post.new(params[:post])

    if @post.save
      redirect_to @post, notice: 'Post has been created.'
    else
      render :new
    end
  end
end

您可以缩短表格。

<%= form_for @post do |f| %>
  <%= f.label :title %>
  <%= f.text_field :title %>

  <%= f.text_area :entry, :size => "60x12" %>

  <%= f.submit %>
<% end %>

当您生成一个支架时,您可以看到这些代码中的优秀示例代码,因此我建议您尝试$ rails generate scaffold Post title body:text并通过示例进行学习。

答案 1 :(得分:0)

提交表单会将输入到该表单中的值(以及其他一些信息)作为名为“params”的哈希传递给控制器​​ - params将包含一个标有表单名称的块,在本例中为“post” ”。

您需要在创建新对象时使用params中的post块。

def create
  @post = Main.new(params[:post])
  if @post.save
    # handles a successful save
  else
    # handles validation failure
  end
end

答案 2 :(得分:0)

尝试:

@post = Main.new(params[:post])
@post.save