2016-03-15 44 views
0

好吧,我查看了很多答案,发布在stackoverflow和许多其他网站上,因为我知道这是一个常见问题,但我似乎无法得到它,并真的很感激,如果有人能指出我在正确的方向。我试图在这里实现的真的很简单,我试图从另一个模型,到我的主页,这是我创建的另一个控制器呈现一个新的表单。因此,基本上在我的主页上显示了由用户创建的所有最近的的列表。此外,我希望用户能够直接从主页添加新帖子。现在我有它显示,但点击提交按钮什么也没有。如何在另一页上渲染另一个模型表单?

这里是POST形式

<div class="panel panel-primary"> 

    <div class="container"> 
    <div class="panel-heading"> 
    <%= image_tag @post.user.avatar.url(:post_pic), class:"img-thumbnail" %> 
    <%= @post.user.name %> 

    <%= 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 |message| %> 
      <li><%= message %></li> 
      <% end %> 
      </ul> 
     </div> 
     <% end %> 

     <div class="field"> 
     <%= f.label :content %><br> 
     <%= f.text_area :content %> 
     </div> 

     <div class="field"> 
     <%= f.file_field :avatar %> 
     </div> 
    </div> 
    </div> 
    <div class="panel-footer"> 
     <div class="actions"> 
     <%= f.submit %> 
     </div> 
    </div> 
    <% end %> 
</div> 

这里是我的主页控制器

class HomeController < ApplicationController 
    def index 
    if user_signed_in? 
     @posts = Post.all 
     @post = current_user.posts.build 

    else 
     redirect_to new_user_registration_path 
    end 
    end 

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

private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_post 
    @post = Post.find(params[:id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def post_params 
    params.require(:post).permit(:user_id, :content, :avatar) 
    end 
end 

最后我的主页指数

<div class="row"> 
    <div class="col-md-3"></div> 
    <div class="col-md-5"> 
     <h1>Home#index</h1> 
     <p>Find me in app/views/home/index.html.erb</p> 

     <%= render 'posts/form' %> 

     <% @posts.each do |post|%> 
      <div class="panel panel-default"> 
       <div class="panel-heading"> 
        <h3 class="panel-title"> 
         <%= image_tag post.user.avatar.url(:post_pic), class:"img-thumbnail" %> 
         <%= post.user.name %> 
        </h3> 
       </div> 
       <div class="panel-body"> 
       <%= post.content %></br></br> 

       <% if post.avatar.file? %> 
       <%= image_tag post.avatar.url(:test), class:"img-thumbnail" %></br> 
       <% end %> 
       </div> 
      </div> 
     <% end %> 
    </div> 
</div> 

条路线

Rails.application.routes.draw do 
    resources :posts 
    get 'users/index' 

    get 'users/show' 

    root 'home#index' 

    devise_for :users 
+0

请向我们展示您的路线,'form_for(@post)'将表单发送到'/ posts' – sled

回答

0

所以,你在做喜欢使用另一个控制器(首页)邮政储蓄数据,而不是柱控制器,对不对?

部分形式为岗位用途:

<%= form_for(@post) do |f| %> 
// @post generated url (/posts) 
// will look for create method in POST Controller 

我建议把你的节电编码在适当的控制器(职位),所以你会阻止代码重复/冗余

提示: 如果从主页视图或帖子查看担心重定向,

可以使用PARAMS [:控制器]检查,其中要求从来,由只要使用if语句

最后,您可以在保存后将重定向到适当的页面。

相关问题