【问题标题】:Routing in Rails with view and new action带有视图和新操作的 Rails 路由
【发布时间】:2015-11-02 13:22:35
【问题描述】:

我有以下问题:

我有一个名为:companies_controller 的控制器,其中我有以下操作:

class CompaniesController < ApplicationController

    #before_filter :set_company, only: [:show, :edit, :update, :destroy]
    # GET /companies
  def index
    @companies = Company.all
  end

  # GET /companies/new
  def new
    @company = Company.new
  end

  # POST /companies
  def create
    @company = Company.new(company_params)

    respond_to do |format|
            if @company.save
            format.html { redirect_to @company, notice: 'Azienda creata.' }
            format.json { render :show, status: :created, location: @company }
          else
            format.html { render :new }
            format.json { render json: @company.errors, status: :unprocessable_entity }
          end
    end
  end

另外,我有这样的看法:

<%= form_for @company ,:url => {:action => :create, :controller => :companies, :method => :post} do |f| %>
  <% if @company.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@company.errors.count, "error") %> prohibited this order from being saved:</h2>

      <ul>
      <% @company.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :RagioneSociale %><br>
    <%= f.text_field :ragione_sociale, size: 40 %>
  </div>


  <div class="actions">
        <!-- Quando eseguiamo l'ordine facciamo il render di _line_item_simple.html perchè nella mail non posso mettere
                 button_to -->
    <%= f.submit 'Completa' %>
  </div>
<% end %>

如果我切断了

@company = Company.new

从新的 action 开始,没有任何效果。 为什么?在其他项目中,我使用了新操作而不创建新对象。 你能解释一下,为什么在这种情况下它不起作用?

这是我的路线:

  get "companies/index"
  get "companies/new"
  post "companies/create"

【问题讨论】:

  • 您正在制作公司创建表格。因此,要创建公司,您需要先初始化公司。如果您不初始化@company 对象,您正在这样做@company = Company.new。您将无法使用 form_for bcoz form_for 仅适用于对象。你需要切换到form_tag。如您所见,您在form_for 中使用@company 对象,所有字段(例如ragione_sociale)都将嵌套在@company 对象中。详情见stackoverflow.com/questions/9540291/…
  • 我认为即使我没有写 @company = Company.new ,rails 也为我做了。但也许没有。
  • 是的,它不会.. 有两种方法,你所做的一种是好的。否则你需要改变你的 form_for 标签有点像这样&lt;%= form_for Company.new ,:url =&gt; {:action =&gt; :create, :controller =&gt; :companies, :method =&gt; :post} do |f| %&gt; 但这不是好的做法

标签: ruby-on-rails view controller routes action


【解决方案1】:

请在路线中试试这个

resources companies

和形式

form_for @company  do |f|

【讨论】:

  • 我不能,因为我不必为此控制器编写所有操作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-30
  • 2014-11-21
  • 2010-12-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多