Ruby on rails Rails链接到和提交参数

Ruby on rails Rails链接到和提交参数,ruby-on-rails,Ruby On Rails,例如 我做了一个脚手架工程 rails generate scaffold Post name:string title:string content:text 如果我去 localhost:3000/posts 它显示了这样的视图 <h1>Listing posts</h1> <table> <tr> <th>Name</th> <th>Title</th> <

例如

我做了一个脚手架工程

rails generate scaffold Post name:string title:string content:text
如果我去

localhost:3000/posts
它显示了这样的视图

<h1>Listing posts</h1>

<table>
  <tr>
    <th>Name</th>
    <th>Title</th>
    <th>Content</th>
    <th></th>
    <th></th>
    <th></th>
  </tr>

<% @posts.each do |post| %>
  <tr>
    <td><%= post.name %></td>
    <td><%= post.title %></td>
    <td><%= post.content %></td>
    <td><%= link_to 'Show', post %></td>
    <td><%= link_to 'Edit', edit_post_path(post) %></td>
    <td><%= link_to 'Destroy', post, method: :delete, data: { confirm: 'Are you sure?' } %></td>
  </tr>
<% end %>
</table>

<br />
<%= link_to 'New Post', new_post_path %>
如果是这样,如果我想调用这个方法。操作是否必须是posts/create

伙计……Rails对新手来说太难了,api文档也太麻烦了:(

问题:“我不理解第二个参数,比如post,edit\u post\u path,这类东西。”

回答:
edit\u post\u path
是编辑您的帖子资源的路径。它将引用当前帖子作为参数,以便它知道您要编辑的帖子

RubyonRails为您的所有资源创建restful路由,因此当您围绕Post模型生成脚手架时,您可以自动地获得索引、编辑、显示和新路由

您可能想看看这一点,这将使您更好地了解路由是如何工作的

至于你的其他问题,你真的应该像塔默指出的那样把它们分成单独的帖子,以更好地适应StackOverflow的问答形式

<td><%= link_to 'Show', post %></td>
同样,
edit\u post\u path
是Rails在
routes.rb
文件中放置
resources:posts
时自动生成的方法。调用该方法时,它返回编辑
post
对象的URL

destroy链接与此略有不同。在Rails中,您不能使用GET链接删除资源。当您告诉
link\u to
您要删除的内容时,它实际上会在页面上创建一个隐藏表单,提交删除请求(这不是真正的删除请求,因为您无法从浏览器发出该请求;相反,它是一个带有
方法=\u DELETE
作为参数的帖子),当您单击呈现的链接时,框架JavaScript将提交该隐藏表单

键入
rake routes
,查看Rails从
routes.rb.rb文件中生成的所有路由,并根据建议,阅读Rails路由的一般内容以及其他内容

关于你的第二个问题

<%= form_for(@post) do |f| %>


同样,这是一个静止的东西。Rails将询问对象是否是新记录。如果是,它知道使用指向
索引
操作的
post
方法呈现
form
标记;否则,它将使用指向对象URL的
put
方法呈现
form
标记。

e问题,请分开张贴,不要在同一个问题中。
<form accept-charset="UTF-8" action="/posts" class="new_post" id="new_post" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓"><input name="authenticity_token" type="hidden" value="5d3i4uFDrhq+qenAWLbBxWqaA6rJAKrPedVIO04NK6o="></div>

  <div class="field">
    <label for="post_name">Name</label><br>
    <input id="post_name" name="post[name]" size="30" type="text">
  </div>
  <div class="field">
    <label for="post_title">Title</label><br>
    <input id="post_title" name="post[title]" size="30" type="text">
  </div>
  <div class="field">
    <label for="post_content">Content</label><br>
    <textarea cols="40" id="post_content" name="post[content]" rows="20"></textarea>
  </div>
  <div class="actions">
    <input name="commit" type="submit" value="Create Post">
  </div>
</form>
def create
    @post = Post.new(params[:post])

    respond_to do |format|
      if @post.save
        format.html { redirect_to @post, notice: 'Post was successfully created.' }
        format.json { render json: @post, status: :created, location: @post }
      else
        format.html { render action: "new" }
        format.json { render json: @post.errors, status: :unprocessable_entity }
      end
    end
  end
<td><%= link_to 'Show', post %></td>
<td><%= link_to 'Edit', edit_post_path(post) %></td>
<%= form_for(@post) do |f| %>