惯用的轨道方式放置微帖子的文本框和提交按钮,避免"render 'form'"脚手架代码?



我今天一直在尝试Ruby+Rails。

在创建了标准的UserMicropost模型、视图和控制器之后,我想添加一个页面,作为用户,可以在其中添加一个新的微柱。

到目前为止,由于真的没有进行身份验证,我很乐意有一个页面,可以通过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| %>

在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

相关内容

  • 没有找到相关文章

最新更新