[英]Idiomatic Rails way to put a micropost's textbox and submit button, avoiding the “render 'form'” scaffold code?
我今天一直在尝试Ruby + Rails。
创建标准的User
and Micropost
模型,视图和控制器后,我想添加一个页面,在该页面中,作为用户可以添加一个新的Micropost。
到目前为止,由于实际上没有进行身份验证,因此我很高兴有一个页面可以通过url获取用户ID,并且只有文本框形式的页面可以输入微博添加到站点。
我已经连接了所需的路由:
match 'users/new_micropost/:user_id' => 'Users#new_micropost'
以及控制器的代码:
def new_micropost
@user = User.find(params[:user_id])
@micropost = Micropost.new #still not so sure about this
end
我将粘贴的microposts/new.html.erb
文件复制到名为users/new_micropost.html.erb
的新文件中:
<h1>New <%= @user.name %>'s micropost</h1> #added this thingy
<%= render 'form' %>
<%= link_to 'Back', users_path %>
替换惯用方式替换<%= render 'form' %>
只打印一个文本框,问我要发布在网站上的微博加上提交按钮的最佳方法是什么?
谢谢
对于表单,只需创建自己的表单,并传入@micropost
变量,例如:
<%= form_for @micropost do |f| %>
<%= f.text_area :body, :size => "60x12" %>
<%= f.submit "Post" %>
<% end %>
请查看这些指南以获取更多信息 。 您可能需要在控制器中为此动作创建一个单独的create
动作。
另外,如果您希望将微博与用户相关联,则需要添加以下内容:
class User < ActiveRecord::Base
has_many :microposts, :dependent => :destroy
end
class Micropost < ActiveRecord::Base
belongs_to :user
end
然后,您将更改新内容并创建类似于以下内容的操作:
def new_micropost
@user = User.find(params[:user_id])
@micropost = @user.microposts.build
end
def create_micropost
@user = User.find(params[:user_id])
@micropost = @user.microposts.build(params[:micropost])
if @micropost.save
redirect_to some_path
else
render 'new_micropost'
end
end
请注意,您可能必须更新表单以提交给正确的控制器: <%= form_for @micropost, url: create_micropost_path(@user.id) do |f| %>
<%= form_for @micropost, url: create_micropost_path(@user.id) do |f| %>
在Rails中,控制器有7种标准动作,与创建,读取,更新和删除资源有关。 如果您将动作命名为MicropostsController的new
,那就太好了。 您可以使用form_for
标记创建一个文本区域以及一对用于提交和取消的按钮。 例:
<%= form_for @micropost do |f| %>
<%= f.label :content %>
<%= f.text_area :content %>
<%= f.submit %>
<% end %>
但是,学习运动的最简单方法是使用Rails生成器,如下所示:
rails generate scaffold Micropost content:text
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.