繁体   English   中英

惯用的Rails方式可以放置微博的文本框并提交按钮,从而避免“渲染'表单'”支架代码?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM