0

我对 Rails 还是很陌生,而且很多都不是我习惯的。找不到我的答案,实际上也不知道要搜索什么,所以请帮忙。

这是:

def create
    @note = Note.new(params[:note])
    @note.creator = current_user
    if member_of_project? @note.project_id
      if @note.save
        redirect_to @note, :notice => "Successfully created note."
      else
        render :action => 'new'
      end
    else
      render :action => 'new'
    end
  end

等于:

def create
    @note = Note.new(params[:note])
    @note.creator = current_user
    if member_of_project? @note.project_id && @note.save
      redirect_to @note, :notice => "Successfully created note."
    else
      render :action => 'new'
    end
  end

???

我真正想知道的是第二个是否会打电话@note.save

4

2 回答 2

3

与许多其他语言一样,Ruby 将实现“短路求值”,这意味着只有在第一个操作数为真时,第二个操作数才会在“与”中求值。您可以在此处阅读更多关于 ruby​​ 的详细信息:http ://www.linuxtopia.org/online_books/programming_books/ruby_tutorial/Ruby_Expressions_Defined_And_Or_and_Not.html

于 2012-11-07T20:13:41.827 回答
0

假设您已经尝试过并且失败了。是的,如果它到达条件的第二部分,save 方法应该运行。

我发现,如果使用这样的条件,我需要将其括在括号中以使代码正常运行。

 if (member_of_project? @note.project_id) && (@note.save)

当然,如果我不问“你的测试告诉你什么?”,我会成为什么样的开发者?

于 2012-11-07T20:06:48.413 回答