我有一个应用程序我正在制作用户可以发布项目,然后他们可以选择"生活"当他们选择" live"如果正确,帖子应该显示在实时标签中。
现在这是我的posts_controller.rb创建和更新操作
def create
@post = Post.new(post_params)
if @post.save
redirect_to post_path(@post)
flash[:success]="Post created"
else
render 'new'
end
end
def update
@post = Post.find(params[:id])
if @post.update(post_params)
flash[:success]="Updated successfully"
redirect_to post_path(@post)
else
render 'edit'
end
end
--------------------------------
def post_params
params.require(:post).permit(:title, :description,
:category_id, :subcategory_id, :live)
end

我的帖子表格,用于编辑和创建新帖子。
<script type="text/javascript">
$(document).ready(function() {
var subcat;
subcat = $('#subcategory-select').html();
return $('#category-select').change(function() {
var cat, options;
cat = jQuery('#category-select').children('option').filter(':selected').text();
options = $(subcat).filter("optgroup[label='" + cat + "']").html();
if (options) {
return $('#subcategory-select').html(options);
} else {
return $('#subcategory-select').empty();
}
});
});
</script>
<script>
$(function() {
$( "#tabs" ).tabs();
});
</script>
<%= render 'shared/errors', obj: @post%>
<%= form_for @post do |f| %>
<p>
<%= f.label :title %><br/>
<%= f.text_field :title, maxlength: "10" %>
</p>
<p>
<%= f.label :description %><br>
<%= f.text_area :description %>
</p>
<p>
<%= f.label :category_id%>
<%= f.collection_select(:category_id, Category.all, :id, :name,
{ prompt: 'Select a category' }, { id: 'category-select' }) %>
</p>
<p>
<%= f.label :subcategory_id%>
<%= f.grouped_collection_select :subcategory_id, Category.all, :sub_categories,
:name, :id, :name, { include_blank: 'Select a sub category' },
{ id: 'subcategory-select' } %>
</p>
<p>
<%= f.label :live%>
<%= check_box_tag :live , 0 , @post.live ? false : true %> <!--work on-->
<p>
<p>
<%= f.submit %>
</p>
<% end %>
<%= link_to "Back to posts listing", posts_path %>
&#13;
帖子没有保存为live
,但我可以强制它与rails控制台一起使用。这让我想到了下一期。
我强迫post
拥有live == true
并且它不会显示在我的引导程序实时标签中。这是我的子类别show action,这是我首先尝试这样做的地方。
def show
@subcategory = SubCategory.find(params[:id])
@subcategory_posts = @subcategory.posts#live posts in this subcat
@subcategory_posts_live = (params[:live] == 'true')
end
&#13;
show.html.erb
引导程序导航标签应显示实时帖子但不点击
<ul class="nav nav-tabs" role="tablist">
<li role="presentation" class="active"><a href="#home" aria-controls="home" role="tab" data-toggle="tab">Posts</a></li>
<li role="presentation"><a href="#profile" aria-controls="profile" role="tab" data-toggle="tab">Live ◯</a></li>
<li role="presentation"><a href="#messages" aria-controls="messages" role="tab" data-toggle="tab">xx</a></li>
</ul>
<!-- Tab panes -->
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="home"><%=render 'posts/post', obj: @subcategory_posts %></div>
<div role="tabpanel" class="tab-pane" id="profile"><%=render 'posts/post', obj: @subcategory_posts_live %></div>
<div role="tabpanel" class="tab-pane" id="messages">...</div>
</div>
&#13;
我知道它正在查找帖子,因为在视图中显示<p>No Listings found</p>
,如果在该特定类别中找不到帖子,则显示我在我的帖子/ _post`部分显示的内容子类别帖子。
不确定如何解决这个问题,任何指导都表示赞赏。
答案 0 :(得分:1)
您的表单似乎缺少一个复选框,允许用户选择帖子是否有效。你需要一个复选框。
所以这样的事情可能有用:
<%= f.check_box :live %>
查询所有正在发布的帖子(我假设这是你的数据库中的布尔列):
@live_posts = Post.where(live: true)
对于子类别查询,您可以执行以下操作:
@subcategory_posts = Post.where(subcategory_id: params[:id], live: true)
(这假设帖子有一个subcategory_id列)