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上工作 我想做什么才能使这项工作? 任何想法?
答案 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| %>
然后您的选择字段应自动选择正确的类别。
顺便说一句,它还可以使您的表单在创建操作中可用。