嘿所有,(我是铁轨的初学者)
我创建了一个看起来像这样的控制器:
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创建了一个模型:帖子带有:描述“文本”字段。 我的问题是我如何在代码中实现模型,所以我写的任何东西都会在我之前写的东西的列表中,因为现在(显然)如果我写了一些东西,删除我之前写的那个。
谢谢大家!
答案 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/