Ruby on rails 惯用的Rails方式放置micropost';s文本框和提交按钮,避免使用;渲染';表格'&引用;脚手架代码?

Ruby on rails 惯用的Rails方式放置micropost';s文本框和提交按钮,避免使用;渲染';表格'&引用;脚手架代码?,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我今天一直在尝试Ruby+Rails 在创建了标准的User和Micropost模型、视图和控制器之后,我想添加一个页面,作为用户,可以添加一个新的Micropost 到目前为止,由于确实没有进行身份验证,我很高兴有一个页面,可以通过url获取用户id,在表单中只有一个文本框,可以在其中键入要添加到站点的micropost 我已经连接了所需的路由: match 'users/new_micropost/:user_id' => 'Users#new_micropost' 以及控制器的代码

我今天一直在尝试Ruby+Rails

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

到目前为止,由于确实没有进行身份验证,我很高兴有一个页面,可以通过url获取用户id,在表单中只有一个文本框,可以在其中键入要添加到站点的micropost

我已经连接了所需的路由:

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
我已将粘贴的
microspost/new.html.erb
文件复制到名为
users/new_microspost.html.erb
的新文件中:

<h1>New <%= @user.name %>'s micropost</h1> #added this thingy

<%= render 'form' %>

<%= link_to 'Back', users_path %>
New的micropost添加了这个东西
替换
的惯用方法是只打印一个文本框,询问我想在网站上发布的微博客加上提交按钮,那么最好的替换方法是什么


感谢

在Rails中,控制器有7个标准操作,与资源的创建、读取、更新和删除相关。如果您能将MicropostsController的操作命名为新的,那就太好了。您可以使用tag的
form_创建一个文本区域以及一对提交和取消按钮。
例如:

<%= form_for @micropost do |f| %>
   <%= f.label :content %>
   <%= f.text_area :content %>
   <%= f.submit %>

<% end %>

在Rails中,控制器有7个标准动作,与资源的创建、读取、更新和删除相关。如果您能将MicropostsController的操作命名为新的,那就太好了。您可以使用
tag的
form_创建一个文本区域以及一对提交和取消按钮。
例如:

<%= form_for @micropost do |f| %>
   <%= f.label :content %>
   <%= f.text_area :content %>
   <%= f.submit %>

<% end %>

对于表单,只需创建您自己的,传入
@micropost
变量,类似于:

<%= form_for @micropost do |f| %>
  <%= f.text_area :body, :size => "60x12" %>
  <%= f.submit "Post" %>
<% 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 do |f| %>
  <%= f.text_area :body, :size => "60x12" %>
  <%= f.submit "Post" %>
<% 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


请注意,您可能需要更新表单以提交到正确的控制器:

对于表单,只需创建自己的表单,并传入
@micropost
变量,类似于:

<%= form_for @micropost do |f| %>
  <%= f.text_area :body, :size => "60x12" %>
  <%= f.submit "Post" %>
<% 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 do |f| %>
  <%= f.text_area :body, :size => "60x12" %>
  <%= f.submit "Post" %>
<% 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


请注意,您可能需要更新表单以提交到正确的控制器:

我已经使用了rails生成器。用户和Micropost都是这样创建的。然后在
localhost:3000/microposts/new
上生成了一个表单。我已经使用了rails生成器。用户和Micropost都是这样创建的。然后在
localhost:3000/microposts/new
上生成一个表单?