首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails -我的“创建/新”方法不起作用

Rails -我的“创建/新”方法不起作用
EN

Stack Overflow用户
提问于 2021-02-19 04:00:17
回答 2查看 408关注 0票数 0

我已经创建了一个表单,以便用户可以添加一个新的图片到网站目录,但出于某些原因,它不能工作。表单填好后,我点击“Submit”按钮,但是什么也不会发生,我只是停留在同一个页面上(我没有任何错误消息.)。我不认为这个错误来自我的Controller,因为当我在Controller的'create‘方法中添加raise关键字时,什么都不会发生。

我肯定这是个业余错误..。但我看不出来是什么。谢谢你的帮忙!

picture.rb /图片模型:

代码语言:javascript
复制
class Picture < ApplicationRecord
  validates :name, presence: true
  has_many_attached :photo
end

new.html.erb /这是我的表格:

代码语言:javascript
复制
<%= form_for(@picture) do |f| %>
  <div class="form-group">
    <%= f.label :name, "Please indicate the name" %>
    <%= f.text_field :name, class:"form-control", placeholder:"(mandatory field)" %>
  </div>
  <div class="form-group">
    <%= f.label :description, "Add a description" %>
    <%= f.text_area :description, class:"form-control" %>
  </div>
  <div class="form-group">
    <div class="row">
      <div class="col">
        <%= f.label :category, "Add a category" %>
        <%= f.text_field :category, class:"form-control" %>
      </div>
      <div class="col">
        <%= f.label :price, "Indicate the price (when applicable)" %>
        <%= f.number_field :price, class:"form-control", placeholder:"0,00$ CAD" %>
      </div>
    </div>
  </div>
  <div class="form-group">
    <div class="row">
      <div class="col">
        <p>Where do you want to add this item?</p>
          <div>
            <%= f.check_box :is_home_item %>
            <%= f.label :is_home_item, "Homepage" %>
          </div>
          <div>
            <%= f.check_box :is_portfolio_item %>
            <%= f.label :is_portfolio_item, "Work" %>
          </div>
          <div>
            <%= f.check_box :is_sketchbook_item %>
            <%= f.label :is_sketchbook_item, "Sketchbook" %>
          </div>
        <div>
          <%= f.check_box :is_shopping_item %>
          <%= f.label :is_shopping_item, "Shopping" %>
        </div>
      </div>
      <div class="col">
        <div class="form-group">
          <%= f.label :photo, "Select your picture" %>
          <%= f.file_field :photo, class:"form-control-file" %>
        </div>
      </div>
    </div>
  </div>
  <div class="form-group">
    <%= f.submit class:"btn btn-lg btn-primary" %>
  </div>
<% end %>

pictures_controller.rb /

代码语言:javascript
复制
class PicturesController < ApplicationController
  def new
    @picture = Picture.new
  end

  def create
    @picture = Picture.new(picture_params)
    if @picture.save
      redirect_to root_path(@picture), notice: "Picture was successfully created"
    else
      render :new
    end
  end

  private

  def picture_params
    params.require(:picture).permit(:name, :description, :category, :price, :is_home_item, :is_portfolio_item, :is_sketchbook_item, :is_shopping_item, :photo)
  end
end

这是我在本地服务器控制台上看到的文本

下面是我表单的HTML输出:

代码语言:javascript
复制
<form>
<input type="hidden" name="authenticity_token" value="7MxWbzbltjXcAx2dvgRwIu07WMpyjPQji6LI6ELifMZODLJyMBucNApnPRk8vsjshSEjyMMenDUfvDw6pN+/4Q==">
  <div class="form-group">
    <label for="picture_name">Indicate the name</label>
    <input class="form-control" placeholder="(mandatory field)" type="text" name="picture[name]" id="picture_name">
  </div>
  <div class="form-group">
    <label for="picture_description">Add a description</label>
    <textarea class="form-control" name="picture[description]" id="picture_description"></textarea>
  </div>
  <div class="form-group">
    <div class="row">
      <div class="col">
        <label for="picture_category">Add a category</label>
        <input class="form-control" type="text" name="picture[category]" id="picture_category">
      </div>
      <div class="col">
        <label for="picture_price">Indicate the price (when applicable)</label>
        <input class="form-control" placeholder="0,00$ CAD" type="number" name="picture[price]" id="picture_price">
      </div>
    </div>
  </div>
  <div class="form-group">
    <div class="row">
      <div class="col">
        <p>Where do you want to add your picture?</p>
          <div>
            <input name="picture[is_home_item]" type="hidden" value="0"><input type="checkbox" value="1" name="picture[is_home_item]" id="picture_is_home_item">
            <label for="picture_is_home_item">Homepage</label>
          </div>
          <div>
            <input name="picture[is_portfolio_item]" type="hidden" value="0"><input type="checkbox" value="1" name="picture[is_portfolio_item]" id="picture_is_portfolio_item">
            <label for="picture_is_portfolio_item">Work</label>
          </div>
          <div>
            <input name="picture[is_sketchbook_item]" type="hidden" value="0"><input type="checkbox" value="1" name="picture[is_sketchbook_item]" id="picture_is_sketchbook_item">
            <label for="picture_is_sketchbook_item">Sketchbook</label>
          </div>
        <div>
          <input name="picture[is_shopping_item]" type="hidden" value="0"><input type="checkbox" value="1" name="picture[is_shopping_item]" id="picture_is_shopping_item">
          <label for="picture_is_shopping_item">Shopping</label>
        </div>
      </div>
      <div class="col">
        <div class="form-group">
          <label for="picture_photo">Select your picture</label>
          <input class="form-control-file" type="file" name="picture[photo]" id="picture_photo">
        </div>
      </div>
    </div>
  </div>
  <div class="form-group">
    <input type="submit" name="commit" value="Create Picture" class="btn btn-lg btn-primary" data-disable-with="Create Picture">
  </div>

My routes :

代码语言:javascript
复制
Rails.application.routes.draw do
  devise_for :users
  
  # Pages routes
  root to: 'pages#home'
  get 'about', to: 'pages#about'
  get 'portfolio', to: 'pages#portfolio'
  get 'sketchbook', to: 'pages#sketchbook'
  get 'shopping', to: 'pages#shopping'
  
  # Pictures routes
  resources :pictures

end

这是我在航站楼的路线

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-21 02:56:12

不太清楚为什么会发生这种情况,但不建议使用form_for,所以您应该用form_with替换它。

您可以使用模型,如@picture和form_with (如医生们中所描述的)。

代码语言:javascript
复制
<%= form_with(model: @picture) do |form| %>
  # fields
<% end %>

这应该创建一个表单DOM对象,如下所示:

代码语言:javascript
复制
<form action="/pictures" method="post" accept-charset="UTF-8" >
  <input name="authenticity_token" type="hidden" value="..." />
  ...
</form>

如果由于某种原因,您可以在method: :post中传递form_with (即。<%= form_with(model: @picture, method: :post) do |form| %>)。

票数 0
EN

Stack Overflow用户

发布于 2021-02-23 11:37:58

目前,您已经得到了带有单数has_many_attachedphoto。这似乎不是正确的语法。您是否尝试过更改为has_many_attached :photos并修改picture_params以将照片作为数组photos: []传递

或者,如果您想附加一张照片,那么您应该尝试在图片模型中更改为has_one_attached :photo

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66271593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档