Ruby on Rails Form & View 在同一页面上



在我的主页上有一个帐户创建(用户)表单,一个设计(设计)提交表单,我试图在同一页面上添加一个部分,用户可以查看活动设计并对它们进行投票。我在添加该部分到页面时遇到了问题,因为我认为是提交表单——以下是相关文件:

着陆控制器(主页控制器)

class LandingController < ApplicationController
    def index
        @email = Email.new
        @design = Design.all
        @user = User.new
    end
end
  • 当我将@design改为Design.new时,它适用于提交而不是视图。

designs-controller

class DesignsController < ApplicationController
protect_from_forgery with: :exception
before_filter :admin_user, only: [:show ,:edit, :update, :destroy]
def show
  @design = Design.find(params[:id])
end
def edit
  @design = Design.find(params[:id])
end
def new
    @design = Design.new
end
def create
  @design = Design.new(design_params)
  respond_to do |format|
    if @design.save
      format.html  { redirect_to root_path, notice: 'Thank You For Your Submission!' }
      format.json  { render json: Design.create(design_params) }
    else
      @user = User.new
      format.html  { render "landing/index" }
      format.json  { render :json => @design.errors, :status => :unprocessable_entity }
    end
  end
end
def update
  @design = Design.find(params[:id])
    if @design.update(design_params)
      redirect_to '/cpanel'
    else
      render 'edit'
    end
end
def destroy
  @design = Design.find(params[:id])
  @design.destroy
  redirect_to '/cpanel'
end 
    private
    def design_params
        params.require(:design).permit(:dfirstname, :dlastname, :demail, :rcode, :frontview, :sideview, :backview, :category, :active)
    end
  def admin_user
    redirect_to(root_path) unless current_user && current_user.admin?
  end
end

然后我在着陆视图中有这个:

<% @design.each do |design| %> 
    <% if design.active %>
        <%= image_tag design.frontview, :class => 'design-image' %>
    <% else %>
    <% end %>
<% end %>

和下面这个

<%= form_for @design.new, url: designs_path, html: {class: "design-form", :multipart => true} do |f| %>
    <h2>Design Submission</h2>
        <% if @design.new.errors.any? %>
            <ul>
                <% @design.errors.full_messages.each do |message| %>
                <li class="e-message">- <%= message %></li>
                <% end %>
            </ul>
        <% end %>
        ... form ...
<% end %>

基本上让这些工作在一起,因为现在它会加载页面,但然后给我一个错误信息,当我试图提交表单。具体错误信息为着陆索引页undefined method each

不能在定义为@design = Design.allform中使用@design。您应该将@design = Design.all更改为@designs = Design.all,并在索引方法

中添加@design = Design.new
class LandingController < ApplicationController
  def index
    @email = Email.new
    @designs = Design.all
    @design = Design.new
    @user = User.new
  end
end

<% @design.each do |design| %>

<% @designs.each do |design| %>

<%= form_for @design.new, url: designs_path, html: {class: "design-form", :multipart => true} do |f| %>

<%= form_for @design, url: designs_path, html: {class: "design-form", :multipart => true} do |f| %>

更新:

根据我们的讨论和design_controller.rb的代码,在else块的create方法中,你应该有@designs = Design.all,因为如果创建失败,你正在用这个代码format.html { render "landing/index" }渲染index.html.erb,所以Rails不知道在这种情况下@designs来自哪里。

def create
  @design = Design.new(design_params)
  respond_to do |format|
    if @design.save
      format.html  { redirect_to root_path, notice: 'Thank You For Your Submission!' }
      format.json  { render json: Design.create(design_params) }
    else
      @user = User.new
      @designs = Design.all
      format.html  { render "landing/index" }
      format.json  { render :json => @design.errors, :status => :unprocessable_entity }
    end
  end
end

最新更新