Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 未定义的方法';随机生成';对于#<;发电机:0x4cce798>;_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 3 未定义的方法';随机生成';对于#<;发电机:0x4cce798>;

Ruby on rails 3 未定义的方法';随机生成';对于#<;发电机:0x4cce798>;,ruby-on-rails-3,Ruby On Rails 3,我有一个方法,我想从我的控制器调用它。我在stacks中读到的大部分都是说在applicationController中包含了这个方法,所以我就这么做了。但我还是犯了以下错误。有人能帮我吗?rails的新特性 应用程序控制器: helper_method :random_generate def random_generate length = @generator.primer_length chars = 'ATGC' seq = ''

我有一个方法,我想从我的控制器调用它。我在stacks中读到的大部分都是说在applicationController中包含了这个方法,所以我就这么做了。但我还是犯了以下错误。有人能帮我吗?rails的新特性

应用程序控制器:

helper_method :random_generate

   def random_generate
     length = @generator.primer_length
        chars = 'ATGC'
        seq = ''
        length.times { seq << chars[rand(chars.size)] }
       @generator.random_primer_generated= seq
    end 
helper\u方法:随机生成
def随机生成
长度=@generator.primer\u长度
字符='ATGC'
序号=“”

length.times{seq如果要在
@generator
上调用
random\u generate
,则必须在
generator
类中实现该方法。您所做的是在
应用程序控制器
中实现它,因此您必须在不引用
@generator
的情况下调用它


另外,我认为调用
helper\u方法:random\u generate
仅当您想在视图中作为控制器方法调用
random\u generate
时才需要。

这只是我的问题,还是不应该使用
random\u generate
而不是
random\u primer\u generated
如何将该方法实现到我的生成器类?(我是说我应该把它们放在哪里?).这就是为什么他们说如果我们把一个方法放在ApplicationController中,我们实际上是在给所有控制器提供可访问的方法吗?我实际上是在试图调用我视图中的random_generate。我想把我的值传递给random_generate方法,但因为我有很多选择,要么是通过random_generate生成,要么是通过我使用的另一个函数生成没有包含在我的代码中。问题是
@generator.random_generate
调用
@generator
上的方法,但您在控制器上定义了该方法。要么在没有
@generator
的情况下调用它,要么在
generator
模型类中实现该方法。呃,我知道这听起来很愚蠢,但您能告诉我不同的方法吗在ApplicationController和GeneratorController中编写我的方法之间的间隔?如果我在ApplicationController中编写它们,那么所有控制器都可以使用该方法?您似乎不明白。
@generator
是您的模型。它不知道
随机生成
,因为它是在您的控制器上定义的。它r您可以这样调用您的方法:
random\u generate
而不是
@generator.random\u generate
,或者将方法移动到模型中。您应该能够从视图中以任意方式调用它。
class GeneratorsController < ApplicationController
  before_action :set_generator, only: [:show, :edit, :update, :destroy]
  after_action :generate_option, only: [:create,:edit]
  helper_method :random_primer_generated
  # GET /generators
  # GET /generators.json
  def index
    @generators = Generator.all
  end

  # GET /generators/1
  # GET /generators/1.json
  def show
  end

  # GET /generators/new
  def new
    @generator = Generator.new
  end

  # GET /generators/1/edit
  def edit
  end

  # POST /generators
  # POST /generators.json
  def create    
    @generator = Generator.new(generator_params)

    respond_to do |format|
      if @generator.save
        format.html { redirect_to @generator, notice: 'Generator was successfully created.' }
        format.json { render action: 'show', status: :created, location: @generator }
      else
        format.html { render action: 'new' }
        format.json { render json: @generator.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /generators/1
  # PATCH/PUT /generators/1.json
  def update
    respond_to do |format|
      if @generator.update(generator_params)
        format.html { redirect_to @generator, notice: 'Generator was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: 'edit' }
        format.json { render json: @generator.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /generators/1
  # DELETE /generators/1.json
  def destroy
    @generator.destroy
    respond_to do |format|
      format.html { redirect_to generators_url }
      format.json { head :no_content }
    end
  end

  def generate_option
    if params[:choice] == 'Randomly'
        @generator.random_generate
    end
    @generator.save!
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_generator
      @generator = Generator.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def generator_params
      params.require(:generator).permit(:primer_length, :choice, :random_primer_generated)
    end
end
<%= form_for (@generator ) do |f| %>
  <% if @generator.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@generator.errors.count, "error") %> prohibited this generator from being saved:</h2>

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

  <div class="field">
    <label>Primer Length</label><br>
       <%= f.number_field :primer_length %>
  </div>

    <label>Selection :</label><br>
    <label>Randomly</label>
    <%= radio_button_tag(:choice, 'Randomly')%>

<%= button_to('Generate',generate_option_generator_path(@generator))%>
<% end %>