2016-10-15 2 views
0

人々は私にこの時点で間違ったコードがあると言った。このメソッドの主な考え方は、ユーザーが1回押すと1つのイベントを作成し、ユーザーが毎日または毎週を押すとイベントの行を作成することです。すべてうまくいくが、コードはかさばる。ルビーコードを改善する

def create 
@event = Event.new(event_params 
@event.start_time = DateTime.parse(params[:start_time], "%Y-%m-%d %H:%i") 
@event.end_time = DateTime.parse(params[:end_time], "%Y-%m-%d %H:%i") 
@event.user_id = current_user.id 
@event.update_attributes(:repeat_id => @event.id) if @event.save 
respond_to do |format| 
    if @event.save 
    format.html { redirect_to persons_profile_path } 
    else 
    format.html { render :new } 
    format.json { render json: @event.errors, status: :unprocessable_entity } 
    end 
interval = 60 if @event.repeat =='daily' 
interval = 20 if @event.repeat =='weekly' 
#creating row of events 
if @event.repeat != 'once' 
    (1..interval).each do |i| 
    @event = Event.new(event_params) 
    @event.start_time = DateTime.parse(params[:start_time], "%Y-%m-%d %H:%i") 
    @event.end_time = DateTime.parse(params[:end_time], "%Y-%m-%d %H:%i") 
    @event.user_id = current_user.id 
    if @event.repeat =='daily' 
     @event.start_time = DateTime.parse(@event.start_time.to_s) + i.day 
     @event.end_time = DateTime.parse(@event.end_time.to_s) + i.day 
    end 
    if @event.repeat =='weekly' 
     @event.start_time = DateTime.parse(@event.start_time.to_s) + i.week 
     @event.end_time = DateTime.parse(@event.end_time.to_s) + i.week 
    end 
    @event.update_attributes(:repeat_id => k) if @event.save 
    @event.save 
    end 
end 

私は他の解決策を見つけることができません。何か案は?そのJSに必要な、日付の解析メソッドには注意を払わないでください。

+0

あなたはイベント行を意味し、2行目に ')'が足りないと思われます。私の主な質問は、コードがうまくいかないのか、非効率的に書かれたのかという問題ですか?それが後であれば、これはコードレビューに移されなければなりません。もし前者が詳細を追加する必要があれば。 –

+0

このコードには重複してその意味が混乱しています。最初に行うことの1つは、特定のデータに対して「DateTime.parse」のような操作を1回試行してから、その値を再利用することです。また、 'if'を' case'に折りたたんで、どのオフセットを使用するのか把握し、そのオフセットを両方の値に追加することもできます。 – tadman

答えて

2

私は問題があなたがあまりにも多くの仕事をするためにコントローラを使用していると思う、それは読むのが難しいです。一般的にコントローラーは次のようになります。

def create 
    @client = Client.new(params[:client]) 
    if @client.save 
    redirect_to @client 
    else 
    render "new" 
    end 
end 

あなたのデータについて考えてみてください。イベントを作成します。作成ボタンが毎日または毎週押されると、イベントが一列に表示されます。だから私たちはそれを表示する方法を考えています、それはcss/htmlの問題であり、コントローラに関するものではありません。

あなたのコードを間違っていると言う理由は、あなたが非常に非典型的なことをしているからです。このコードを学校やプロジェクトに提出した場合、全員が訓練されたのと同じ基本スタイルに従うのではなく、他のすべての人があなたの仕事を理解しやすくなるため、スコアが低くなります。