未显示布尔值为true的帖子

时间:2016-11-18 00:50:18

标签: javascript jquery ruby-on-rails

我有一个应用程序我正在制作用户可以发布项目,然后他们可以选择"生活"当他们选择" 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;
&#13;
&#13;

帖子没有保存为live,但我可以强制它与rails控制台一起使用。这让我想到了下一期。

我强迫post拥有live == true并且它不会显示在我的引导程序实时标签中。这是我的子类别show action,这是我首先尝试这样做的地方。

&#13;
&#13;
  def show
    @subcategory = SubCategory.find(params[:id])
    @subcategory_posts = @subcategory.posts#live posts in this subcat
    @subcategory_posts_live = (params[:live] == 'true')
  end
&#13;
&#13;
&#13;

show.html.erb引导程序导航标签应显示实时帖子但不点击

&#13;
&#13;
	  <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;
&#13;
&#13;

我知道它正在查找帖子,因为在视图中显示<p>No Listings found</p>,如果在该特定类别中找不到帖子,则显示我在我的帖子/ _post`部分显示的内容子类别帖子。

不确定如何解决这个问题,任何指导都表示赞赏。

1 个答案:

答案 0 :(得分:1)

您的表单似乎缺少一个复选框,允许用户选择帖子是否有效。你需要一个复选框。

所以这样的事情可能有用:

<%= f.check_box :live %>

查询所有正在发布的帖子(我假设这是你的数据库中的布尔列):

@live_posts = Post.where(live: true)

对于子类别查询,您可以执行以下操作:

@subcategory_posts = Post.where(subcategory_id: params[:id], live: true)

(这假设帖子有一个subcategory_id列)