2013-11-18 4 views
1

Пример,Rails link_to и f.submit параметры

Я сделал помост проект, как,

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 %> 

Мой вопрос о link_to метод второй параметр.

Если я вижу код html, он преобразует код, подобный этому, в тег.

<a href="/posts/1">Show</a> 
<a href="/posts/1/edit">Edit</a> 
<a href="/posts/1" data-confirm="Are you sure?" data-method="delete" rel="nofollow">Destroy</a> 
<a href="/posts/new">New Post</a> 

Как он анализирует HTML-код?

Я не понимаю параметры, такие как post, edit_post_path, такие вещи.

Второй вопрос.

Когда пользователь хочет создать новое сообщение, он переходит к этому виду.

<%= form_for(@post) do |f| %> 
    <% if @post.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:</h2> 

     <ul> 
     <% @post.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :name %><br /> 
    <%= f.text_field :name %> 
    </div> 
    <div class="field"> 
    <%= f.label :title %><br /> 
    <%= f.text_field :title %> 
    </div> 
    <div class="field"> 
    <%= f.label :content %><br /> 
    <%= f.text_area :content %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

, и если я посмотрю на тег формы, это будет выглядеть так.

<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> 

Мой вопрос в том, где установлен атрибут действия?

и как параметры передаются контроллеру?

В моем исследовании это вызывает метод create_controller posts_controller.

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 

Если это так, если я хочу назвать этот метод. Разве это не должно быть сообщение/создание?

Man .... Rails так трудно для новичков, и апи док настолько неудобно :(

+0

Если у вас есть несколько вопросов, пожалуйста, разместите их отдельно, а не в том же вопросе. –

ответ

1
<td><%= link_to 'Show', post %></td> 

Здесь post является ресурсом, и Rails генерирует URL для ресурсов на основе их типа. Если вы вызываете link_to и передаете ActiveRecord объект в качестве второго параметра, например, ваш объект post, он будет искать URL-адрес show для вашего класса Post.

<td><%= link_to 'Edit', edit_post_path(post) %></td> 

Опять же, edit_post_path является метод, который автоматически генерируется Rails, когда вы поставите resources :posts в файле routes.rb. Когда вы вызываете этот метод, он возвращает URL-адрес для редактирования объекта post.

Ссылка на уничтожение - это немного другая история. В Rails вы не можете удалить ресурс с помощью ссылки GET. Когда вы укажете link_to, который хотите удалить, он фактически создает скрытую форму на странице, которая отправляет запрос на удаление (это не истинный запрос DELETE, потому что вы не можете выдать это из браузера, вместо этого это POST с method=_delete в качестве параметра), и когда вы нажмете визуализированную ссылку, фреймворк JavaScript представит эту скрытую форму.

Введите rake routes, чтобы увидеть все маршруты, которые Rails сформировал из вашего файла routes.rb, и, как было предложено, прочтите Rails-маршрутизацию вообще, а также REST.

Для вашего второго вопроса.

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

Опять же, это вещь REST. Rails спросит, является ли объект новой записью или нет. Если это так, он знает, чтобы сделать тег form с помощью метода post, указывающего на действие index; в противном случае он будет показывать тег form с помощью метода put, указывающего на URL-адрес объекта.

1

Вопрос: «Я не понимаю, вторые параметры, как пост, edit_post_path, такого рода вещи .»

Ответ:.. edit_post_path является маршрутом для редактирования сообщения вашего ресурса он принимает ссылку на текущее сообщение в качестве аргумента, так что он будет знать, какую должность вы хотите редактировать

Рубин на Rails создает успокаивающие маршруты для всех ваших ресурсов, поэтому, когда вы создаете строительные леса вокруг модели Post, вы получаете индекс, редактируете, показываете, d новые маршруты автоматически.

Возможно, вы захотите взглянуть на этот Rails routing tutorial, который должен помочь вам лучше понять, как работает маршрутизация.

Что касается ваших других вопросов, вы должны действительно разбить их на отдельные должности, поскольку Tamer указал, что лучше подходит Q & Формат StackOverflow.

Смежные вопросы