好的,所以我看了看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 :(得分:0)
所以,您使用另一个控制器(主页)代替帖子控制器来保存帖子数据,对吧?
您的部分表单供帖子使用:
<%= form_for(@post) do |f| %>
// @post generated url (/posts)
// will look for create method in POST Controller
我建议您将保存代码放在适当的控制器(帖子)中,这样就可以防止代码重复/冗余。
提示强>: 如果您担心从主页视图或帖子视图重定向,
您可以使用参数[:控制器] 来 检查请求的来源 ,只需使用 if语句强>
最后,您可以在保存后将其重定向到正确的页面。