0

我今天一直在尝试 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' %>只打印一个文本框,询问我想在网站上发布的微博是什么以及一个提交按钮?

谢谢

4

2 回答 2

2

对于表单,只需创建您自己的表单,传入@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| %>

于 2013-02-11T01:54:27.140 回答
1

在 Rails 中,控制器有 7 个标准动作,与资源的创建、读取、更新和删除有关。如果你把你的动作命名new为 MicropostsController 就好了。您可以使用form_for标签创建一个文本区域和一对用于提交和取消的按钮。例子:

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

<% end %>

但是在运动中学习最简单的方法是使用 Rails 生成器,如下所示:

rails generate scaffold Micropost content:text
于 2013-02-11T01:47:08.470 回答