当我点击页面窗体中的视图中的链接时,如何在视图中选择所需的类别

时间:2013-11-05 19:11:46

标签: ruby-on-rails ruby-on-rails-4

im noob in the rails 4,我有帖子,帖子has_many类别,在视图中我有类别的链接它看起来像这样:

<ul class="dropdown-menu">
      <% Category.all.each do |category| %>
      <li><%= link_to category.name, new_post_path %> </li>
      <% end %>
    </ul>

它的渲染用户到表单,它看起来像这样:

    <%= form_for current_user.posts.build(params[:post]) do |f| %>
  <%= render 'shared/error_messages', object: f.object %>
  <div class="field">
    <h2>Заполните заявку</h2>
    <div class="text-container">
    <p>
  Мне нужно
    </p>
     <div class="field">
    <p>
    Подробно опишите задание
    </p>
    <%= f.collection_select :category_id, Category.all, :id, :name %>
    <%= f.text_area :content, placeholder: "Compose new micropost..." %>
    <%= f.date_select :date %>
    <%= f.time_select :time %>
  </div>
</div>
  <%= f.submit "Опубликовать", class: "btn btn-large btn-primary" %>
<% end %>

当用户在

中选择类别时
<ul class="dropdown-menu">
          <% Category.all.each do |category| %>
          <li><%= link_to category.name, new_post_path %> </li>
          <% end %>
        </ul>

在表单页面中,类别是第一类,但我需要在

中选择类别
<ul class="dropdown-menu">
              <% Category.all.each do |category| %>
              <li><%= link_to category.name, new_post_path %> </li>
              <% end %>
            </ul>


class PostsController < ApplicationController
 # before_filter :signed_in_user

  def new
  end

  def index
    @posts = Post.all
  end

  def show
    redirect_to root_url
  end

  def create
    @post = current_user.posts.build(post_params)

    if @post.save
      flash[:success] = "Поздравляем Ваше задание опубликованно"
      redirect_to @post
  else
    render 'posts/new'
  end
end

private
  def post_params
    params.require(:post).permit(:content, :date, :time, :category_id)
  end

  def correct_user
      @post = current_user.posts.find_by_id(params[:id])
      redirect_to root_url if @post.nil?
    end
end

我在rails 4.0.0和ruby 2.0上工作 我想做什么才能使这项工作? 任何想法?

1 个答案:

答案 0 :(得分:1)

有不同的方法可以实现这一目标。

首先,您需要将category.id传递给链接中的posts#new操作,因此您需要<%= link_to category.name, new_post_path(category_id:category.id) %>之类的内容。

然后你可以像这样

将@ post的category_id设置为那个参数
def new
  @post = current_user.posts.new(category_id:params[:category_id])
end

通过这种方式,您可以在@post调用中使用form_for对象,就像这样

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

然后您的选择字段应自动选择正确的类别。

顺便说一句,它还可以使您的表单在创建操作中可用。