提交按钮指向错误操作

时间:2012-08-06 00:16:31

标签: ruby-on-rails forms activerecord

我正在构建一个表单来处理非activerecord模型。我有两个问题..

  1. 当我指向关键字/ id / edit时,我的表单的提交按钮显示为“创建关键字”,按下该提交按钮会将我带到关键字控制器上的create方法。它应该带我去更新行动。

  2. 我还想向我的更新操作发送一个名为'id'的属性。我不知道该怎么做。就像我说的那样,这不是一个活跃的记录模型。

  3. /views/keywords/_form.html.erb

        <%= form_for(@keyword) do |f| %>
    
      <div class="field">
    
        <%= f.label :name %><br />
    
        <%= f.text_field :name %>
    
      </div>
    
      <div class="field">
    
        <%= f.label :keyword %><br />
    
        <%= f.text_field :keyword %>
    
      </div>
    
      <div class="field">
    
        <%= f.label :message1 %><br />
    
        <%= f.text_area :message1 %>
    
      </div>
    
      <div class="field">
    
        <%= f.label :message2 %><br />
    
        <%= f.text_area :message2 %>
    
      </div>
    
        <div class="field">
    
        <%= f.label :start_time %><br />
    
        <%= f.text_area :start_time %>
    
      </div>
    
      <div class="actions">
    
        <%= f.submit %>
    
      </div>
    
     <% end %>
    

    /controller/keywords_controller.rb&gt;&gt;编辑行动

    def edit
    
        result = Keyword.find(params[:id])
    
        result = result.to_array(:get_response, :return, :data, :item)
    
        result = result.first
    
        @keyword = Keyword.new
    
        @keyword.id = result[:item][0][:value]
    
        @keyword.name = result[:item][1][:value]
    
        @keyword.keyword = result[:item][2][:value]
    
        @keyword.message1 = result[:item][3][:value]
    
        if(result[:item][4][:value] != {:"@xsi:type"=>"xsd:string"})
    
        @keyword.message2 = result[:item][4][:value]
    
        end
    
        @keyword.start_time = result[:item][5][:value]
    
    end
    

    /models/keyword.rb

        class Keyword 
    
       extend ActiveModel::Naming
    
      include ActiveModel::Conversion
    
      def persisted?
    
        false
    
      end
    
        attr_accessor :id, :name, :keyword, :message1, :message2, :start_time
      def self.get_keywords(cid)
        #get data from webservice 
      end
    
      end
    

    配置/ routes.rb中

      SchoolBeacon::Application.routes.draw do
    
      devise_for :users
    
      devise_for :admins
    
      resources :keywords
    
      end
    

1 个答案:

答案 0 :(得分:0)

将您的修改操作中的@keyword = Keyword.new行更改为@keyword = Keyword.find(params[:id]),或者找到关键字。如果您使用的是正常的RESTful rails路由,则应该这样做。

实际上,您可以执行form_for(@keyword, :url => keyword_path(@result)并将结果更改为ivar(result变为@result