如何将我的模型连接到我的应用程序

时间:2011-06-01 13:29:09

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

嘿所有,(我是铁轨的初学者)

我创建了一个看起来像这样的控制器:

class HomeController < ApplicationController

  def homepage
  end

  def showmsg
  @postword = params[:p]
  end

end

showmsg视图如下所示:

<%= @postword %>

,我的主页视图如下:

  <%= form_tag( {:controller => 'home', :action => 'showmsg'}, :method => "post") do %>
  <%= text_field_tag(:p,@postword) %>
  <%= submit_tag("post") %>
  <% end %>

现在我有一个表格,我可以在其中写一些内容,它将在showmsg视图中显示。 我用param创建了一个模型:帖子带有:描述“文本”字段。 我的问题是我如何在代码中实现模型,所以我写的任何东西都会在我之前写的东西的列表中,因为现在(显然)如果我写了一些东西,删除我之前写的那个。

谢谢大家!

3 个答案:

答案 0 :(得分:4)

我认为你的方法并不像铁路那么......所以,如果你正在学习铁轨......那你就错了。

制作模特。称之为“消息”:

rails generate model Message content:string

记得要迁移(希望您正确设置数据库):

rake db:migrate

然后在您的控制器中,当您发布时,您可以创建如下消息:

def create #instead of showmsg... 'create' is the standard name for this
  Message.create(params[:message])
  @messages = Message.all
end

这将在数据库中创建消息,然后它将从数据库中获取所有消息并将它们放入@messages。

您需要修改表单,以便它使用form_for。您需要传递它@message,这是您的第一个控制器操作创建的Message.new实例。您应该拨打此new

在您的create.erb.html文件中,您将显示以下所有消息:

<ul>
  <% @messages.each do |message| %>
    <li><%= message.content %></li>
  <% end %>
</ul>

我实际上不建议在创建动作中显示所有消息 - 它应该在index动作中发生,你应该重定向......但我们需要保持这一点。只需谷歌这个或观看一些Ryan的截屏视频,你就可以得到它。

你已经完成了。这是做事的“Rails方式”。最好以他们希望你学习它的方式来学习它。

我还要赞扬您通过缩进来正确格式化代码,并开始将您的方法命名为真正的英语。例如,showmsg不好,show_message好多了。

如果所有这些都令人困惑,那么只需创建一个新项目,然后输入:

rails generate scaffold message content:string

它基本上将构建您想要的应用程序以及更多。您只需阅读代码并了解他们是如何做到的。

希望它有所帮助。

答案 1 :(得分:2)

您的方法并非如此,因此需要进行一些调整和修复。建议:检查rails的REST方法。下面的代码可以使用它有点像轨道,但仍然不是一直在那里。

生成模型

rails generate model Message postword:string

这将生成模型并创建在数据库中创建表所需的迁移。

创建表格

rake db:migrate

定义帖子操作

它会将帖子保存在数据库中。在您的控制器中:

def create
  @message = Message.create!(params[:message])

  if @message.save
    redirect_to "/home/showmsg"
  else
    render :action => "/home/homepage"
  end
end

创建要在表单中使用的消息和实例     def主页         @message = Message.new     端

修复表单标记

<%= form_for @message, :url => "/home/create" do |f| %>
  <%= f.label :postword %>
  <%= f.text_field :postword %>
  <%= f.submit "Create" %>
<% end %>

现在让我们在showmsg页面中显示单词

在控制器中选择数据库中的帖子:

def showmsg
  @postwords = Message.all
end

显示它们:/showmsg.html.erb

<H1>postwords list</H1>
<ul>
  <% @postwords.each do |p| %>
    <li><%= p.postword %></li>
  <% end %>
</ul>

您的routes.rb文件将包含以下路线:

get "home/homepage"
get "home/showmsg"
post "home/create"

答案 2 :(得分:1)

以类似于此的方式定义属性:new_text:

class TheModel
  # Virtual writer - everything assigned to this attribute
  # will be added to self.text
  #
  def new_text=(v)
    self.text += v.to_s
  end

  def new_text
    "" # This is write-only attribute
  end
end

现在,在表单中使用“new_text”字段。

当然,这是一个非常简单的例子。您应该决定是否要在每次调用:new_text=时添加内容,也许某些验证会有所帮助,读取访问者可能需要一些小心,等等。

有关可能有助于您入门的一些优秀指南,请参阅网站http://guides.rubyonrails.org/